java - 小服务程序 3.1 : how to handle body in DELETE request

标签 java servlets glassfish

我正在编写一个服务器来处理来自 javascript 注释包 (annotatorjs.org) 的 http 请求。 javascript 向服务器发送一个 HTTP DELETE 请求,在路径中包含对象的 ID,并在 JSON 对象中发送请求正文中的注释。

我尝试过使用 Java Web 服务对象和普通 servlet 来实现 DELETE 请求。在这两种情况下,当我发出没有正文的请求时,它都有效,但是当我添加正文时,我收到 400 Bad Request。

这是我的servlet

@WebServlet("/api/store/delete/*")
public class AnnotatorServlet extends HttpServlet {  

    @Override protected void doDelete( HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            System.out.println("received DELETE request,requestURI="+request.getRequestURI());        
    }
} 

我的 curl 命令,没有主体成功:

curl -i -X DELETE http://localhost:8080/text/api/store/delete/555608203004e74adbf65343 HTTP/1.1 200 正常 服务器:GlassFish Server 开源版 4.1 X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.1 Java/Oracle Corporation/1.8) 日期:2015 年 5 月 19 日星期二 19:35:08 GMT 内容长度:0

我的 body curl 命令失败:

curl -i -X DELETE -d @test.json http://localhost:8080/text/api/store/delete/555608203004e74adbf65343 HTTP/1.1 400 错误请求 服务器:GlassFish Server 开源版 4.1 X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.1 Java/Oracle Corporation/1.8) 日期:2015 年 5 月 19 日星期二 19:35:16 GMT 连接:关闭 内容长度:0

最佳答案

DELETE 不应该像 GET 一样有主体。

RFC:https://www.rfc-editor.org/rfc/rfc7231#section-4.3.5

A payload within a DELETE request message has no defined semantics; sending a payload body on a DELETE request might cause some existing implementations to reject the request.

最好的做法是,不要这样做。


有人可能会争辩说,这是服务器中的错误。但服务器也可以合法地声明,这是一种罕见的情况,它有权拒绝服务。

关于java - 小服务程序 3.1 : how to handle body in DELETE request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30334776/

相关文章:

java - 如何使用 Servlet 和 JSP 显示 PDF 文档?

java - ejb-jar.xml 环境条目枚举

logging - 如何在 com.sun.enterprise.security.auth.realm.ldap.LDAPRealm 上启用日志记录?

java - Android:从MySQL数据库获取数据

java - 制作一个非常大的 Java 数组

java - Liferay 6.2 上 Spring MVC 表单中的 Portlet 命名空间

java - Spring boot 1.x,如何将指标增加一定量

提交响应后,Java Servlet 无法转发

java - 如何在 ubuntu 14.04 中设置 tomcat7 以便它使用最新的 java-8-oracle JRE?

java - 当从 imageservlet 提供多个 blob 图像时,Glassfish 挂起