为啥浏览器只支持 GET 和 POST HTTP 方法?
Posted
技术标签:
【中文标题】为啥浏览器只支持 GET 和 POST HTTP 方法?【英文标题】:Why a browser only supports GET and POST HTTP methods?为什么浏览器只支持 GET 和 POST HTTP 方法? 【发布时间】:2015-10-12 06:51:33 【问题描述】:我从Apress Apache Tomcat 7阅读了以下文字
HttpServlet.service() 方法实现是一种方便的方式 在代码中控制对 servlet 的访问。例如,小服务程序 从数据库中删除数据应始终使用 DELETE 方法,但是因为浏览器只支持 GET 和 POST 操作,应使用 POST 方法。
似乎大多数浏览器只支持两种 HTTP 方法,GET
和 POST
。
如果是,为什么?
【问题讨论】:
您能否举一个您认为他们应该支持的其他方法的示例以及这种支持可能是什么样的? 我还没有看到一个浏览器只支持GET
和POST
。你是怎么得出这个结论的? PATCH
仍然不寻常。
@Hampus 我添加了来源。
【参考方案1】:
在表单中唯一可能的方法是 GET 和 POST。进行 AJAX 调用时,支持其他方法。
<form>
:
method = get|post [CI] 此属性指定将使用哪种 HTTP 方法来提交表单数据集。可能的(不区分大小写)值为“get”( 默认)和“发布”。
XMLHttpRequest
:
方法 要使用的 HTTP 方法,例如“GET”、“POST”、“PUT”、“DELETE”等。对于非 HTTP(S) URL,将被忽略。
【讨论】:
投票简洁。谢谢。【参考方案2】:现代浏览器允许使用 XMLHttpRequest 进行 GET、POST、PUT 和 DELETE。你可以通过这个bug 10671
执行 PUT 和 DELETE 修改源服务器上的资源是 使用 XmlHttpRequest 直接为现代 Web 浏览器 目的。对于无脚本的浏览器交互,这不是那么简单。 通常,开发人员和框架最终会创建模仿的变通方案 HTTP PUT/DELETE + Etag 交互使用“POST FORM”耦合 使用专门的服务器端代码来整理特殊情况并采取行动 好像在请求中使用了正确的 HTTP 方法
其他注意事项:
使用 POST 作为隧道而不是使用 PUT/DELETE 可能会导致 缓存不匹配(例如 POST 响应是可缓存的5,PUT 响应 不是[6],DELETE 响应不是[7])
使用非幂等方法 (POST) 执行幂等 由于网络故障,操作 (PUT/DELETE) 使恢复复杂化 (例如“重复此操作是否安全?”)。
你也可以参考这个帖子:Are the PUT, DELETE, HEAD, etc methods available in most web browsers?
【讨论】:
我标记了这个答案,因为该链接非常有用。 Guffa 的回答很简洁,我更喜欢这个。以上是关于为啥浏览器只支持 GET 和 POST HTTP 方法?的主要内容,如果未能解决你的问题,请参考以下文章
为啥request.setCharacterEncoding解决中文乱码只限于表单是post的情况,对get不管用?