【问题标题】:JRuby, Sinatra, Warbler app - HTTP PATCH request fails with 501 errorJRuby、Sinatra、Warbler 应用程序 - HTTP PATCH 请求失败并出现 501 错误
【发布时间】:2013-12-11 16:02:12
【问题描述】:

我使用 JRuby 1.7.4、Sinatra 1.4.4 和 Rack 1.5.2 创建了一个简单的 Web 服务。该 Web 服务使用简单的消息“Hello world using [request-type]”响应 GET、POST、PATCH 和 DELETE 请求。

我启动了 Rack 并测试了所有的请求类型。所有四个都有效。

我使用 Warbler 创建应用程序的 war 文件并将其部署到 Tomcat 7.0.47。当我使用 Tomcat PATCH 进行测试时,出现“HTTP 状态 501 - 此 servlet 未针对此 URI 实现方法 PATCH”。 (是的,'不是'重复。但这是我从 Tomcat 得到的响应。)GET、POST 和 DELETE 工作正常。

然后我尝试使用 Jetty 9.1.0。结果相同。 GET、POST 和 DELETE 工作,但 PATCH 失败。

为什么 PATCH 请求会失败,如何让它们与此设置一起工作?

【问题讨论】:

    标签: sinatra jruby warbler http-patch


    【解决方案1】:

    根据Tomcat documentationHttpServlet只能处理GET、POST、PUT、DELETE请求

    公共抽象类HttpServlet 扩展 GenericServlet

    提供一个抽象类来创建一个 HTTP servlet 适合做网站。 HttpServlet 的子类必须覆盖 至少一种方法,通常是以下其中一种:

    doGet,如果 servlet 支持 HTTP GET 请求 doPost,用于 HTTP POST 请求 doPut,用于 HTTP PUT 请求 doDelete,用于 HTTP DELETE 请求

    但你会发现这很有用:

    如果您使用的 HTTP 库不允许覆盖或设置 任意 HTTP 方法名称,您可以发送 POST 请求并提供 通过查询字符串参数覆盖到 HTTP 方法 _HttpMethod.

    例如,要更新帐户,这将与实际的 POST 请求一起使用:

    .../services/data/v23.0/sobjects/Account/0016000000eEhmxAAC?_HttpMethod=PATCH
    

    【讨论】:

    • 朋友提出了类似的建议。但是,我不控制传入的请求,也无法修改它们。
    猜你喜欢
    • 1970-01-01
    • 2015-06-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2014-04-07
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多