环顾四周,我不能说出使用除了GET和POST请求的任何一个Web应用程序(而不是web服务)。 是否有此特殊原因? 做一些浏览器(或服务器)不支持任何其他类型的请求? 或者这只是由于历史原因? 我想利用PUT和DELETE请求,以使我的生活在服务器端轻松一点,但我不愿意,因为没有人这样做。
Answer 1:
其实人相当数量的使用PUT和DELETE,主要用于非浏览器的API。 一些例子是Atom发布协议和谷歌数据API:
- http://www.ietf.org/rfc/rfc5023.txt
- http://code.google.com/apis/gdata/docs/2.0/basics.html
除此之外,你没有看到PUT / DELETE共同使用,因为大多数的浏览器不支持PUT和通过表格删除。 HTML5似乎是固定的:
- http://www.w3.org/TR/html5/forms.html#form-submission-0
它适用于浏览器应用程序的方法是:人设计RESTful应用与PUT和记DELETE,然后“隧道”,通过那些从浏览器的POST请求。 例如,见到这对Ruby on Rails的是如何实现这一使用隐藏字段SO问题:
- 我怎么能仿真RLS PUT /删除Rails和GWT?
所以,你不会是你自己在头脑里的大集HTTP动词的设计应用程序。
编辑:顺便说一句,如果你很好奇,为什么PUT / DELETE从基于浏览器形式的帖子不见了,原来有没有真正的良好的技术原因。 围绕这个线程REST的讨论邮件列表,特别是Roy Fielding的评论,阅读是一些有趣的背景:
- http://tech.groups.yahoo.com/group/rest-discuss/message/9620?threaded=1&var=1&l=1&p=13
编辑:有关于AJAX库是否支持所有这些方法的一些意见。 它归结为实际的浏览器实现的XMLHttpRequest的。 我以为有人可能会发现这个链接方便,测试你的浏览器中看到HttpRequest对象是如何符合各种HTTP选项。
- http://www.mnot.net/javascript/xmlhttprequest/
不幸的是,我不知道是哪个收集这些结果的引用。
Answer 2:
很简单, HTML 4.01 form
元件只允许值“ POST
”和“ GET
在其” method
属性
Answer 3:
强硬的安全政策有些代理服务器可能会删除它们。 我使用PUT和DELETE反正。
Answer 4:
我读过,有些浏览器不支持其他的HTTP方法得当,虽然我不能说出任何细节。
Rails的,特别是会收拾你的形式与方法的参数明确设置这个即使浏览器不支持这些方法。 这似乎是一个合理的预防措施,如果你要做到这一点。
Answer 5:
我说使用HTTP的所有功能,浏览器是该死的,哈哈。 也许它会激发更多的完整和正确使用HTTP协议的前进。 有一个关于净多发生比只有帖子和GET。 关于时间的浏览器实现反映了这一点。
Answer 6:
这取决于你的浏览器和Ajax库。 例如jQuery的支持所有HTTP方法,即使浏览器可能不。 见例如jQuery的“Ajax”的文件在“类型”属性。
该的Restlet的Java框架,可以隧道PUT和DELETE通过HTML POST操作的请求。 要做到这一点,你只需要添加方法=放或方法=删除您的URI的查询字符串,例如:
http://www.example.com/user=xyz?method=delete ...
这是相同的Ruby on Rails的方法(如通过@ars如上所述)。
Answer 7:
就个人而言,我实在看不到任何目的使用PUT或在Web应用程序中删除。 所有的操作,应用程序进行读取或写入,又名输入输出。 为什么你需要区分操作的性质在HTTP请求头? 我能与形式/对象/ OBJECT_ID的相同的URL Ajax调用和不喜欢的删除,更新多个操作,获得的价值,或创造。 只要看一眼的URL,我不知道它是哪一个。 通过使用GET和POST,我的网址是:
/对象/ ID /删除
/对象/ ID /创建
/对象/ ID /更新
/对象/ ID - >暗示GET
等等
根据我的经验有限,这在许多情况下比藏头请求类型的清洁了许多。 我不是说一个人永远不能使用PUT或DELETE,只是说,使用它们只有在绝对必要的。
请参阅“基于REST的Web API”伦纳德·理查森阅读更多关于不同的使用情况和公约关于在REST风格的Web API的HTTP请求方法。