进行布局,或使用 标签进行样式设置。你可以这样做,但它在语义上和/或结构上是不正确的。如今,许多Web框架在其表单中使用特殊的"方法覆盖"字段,这允许它们发送由服务器解释为PUT 或DELETE 的请求。这是一个只能通过允许表单使用这些方法来实现修复的黑客。
@ Ajedi32,表被拒绝,因为浏览器需要更长的时间来解析并花费更长的时间来手动编写代码。 PUT 和DELETE 不会为您提供运行时速度优势和开发速度优势。
@Pacerier虽然没有解释 , ,
和
。就像我说的那样,它是关于语义的。 HTTP方法也是如此。阅读规范:w3.org/Protocols/rfc2616/rfc2616-sec9.html另外,如果您需要更实际的原因,请注意PUT 和DELETE 是幂等的。 POST 不是。
@ Ajedi32,您将语义与协议约定混淆。只有当机器人自动爬过这些数据而没有任何额外信息时,语义数据才有意义。
和
的重点是允许抓取工具抓取它们。 PUT 和DELETE 不是语义数据,因为没有一个适合所有人的爬虫可以抓取整个网站的PUT 和DELETE 请求。还有,谁告诉你POST 不能是幂等的?我见过很多幂等的POST 。 PUT ,DELETE 和POST 是协议约定,而不是语义数据。
@Pacerier实际上,对于正确实现所有HTTP方法的服务器,可以使用OPTIONS方法"爬行"PUT和DELETE请求(或至少确定哪些页面支持它们)。另外,我并不是说POST不能是幂等的,只是说HTTP客户端不能像PUTS和DELETE那样假设它。 (因此,"确认重新提交"会提示您经常在浏览器中看到)。
@Pacerier HTTP Verb是关于请求意图的语义信息,即使它是瞬态的。
HTML表单支持GET和POST。 (HTML5在某一点上添加了PUT / DELETE,但这些都被删除了。)
XMLHttpRequest支持每个方法,包括CHICKEN,尽管某些方法名称不区分大小写(方法对每个HTTP区分大小写),并且出于安全原因(例如CONNECT)根本不支持某些方法名称。
浏览器正在慢慢收敛于XMLHttpRequest指定的规则,但正如另一条评论指出的那样,仍然存在一些差异。
最新的HTML5草案似乎已经放弃了PUT和DELETE支持:dev.w3.org/html5/spec/Overview.html#attr-fs-method
已经提出了一个草案来取消它们:amundsen.com/examples/put-delete-forms
鸡?那只鸟?我想你的意思是CHECKIN。这是一个有趣的元音交换。
不,我的意思是鸡,说明它可以是你喜欢的任何东西。同意关于元音交换有趣但是:-)
注意:IE6 / 7/8只允许"标准"HTTP方法,它们不允许使用CHICKEN方法。你会得到一个"非法论证"的例外。
对于那些和我这个CHICKEN业务一样困惑的人...... w3c-test.org/XMLHttpRequest/open-method-case-sensitive.htm
BREW还是没什么'。
让客户端JavaScript使用CONNECT方法有哪些安全问题?
kb.cert.org/vuls/id/150227
XMLHttpRequest 是JavaScript对象模型中的标准对象。
根据维基百科的说法,XMLHttpRequest 首次作为ActiveX对象出现在Internet Explorer 5中,但后来被制作成标准,并且自1.0,Apple Safari 1.2,Opera 7.60-p1以来,已经包含在Mozilla系列的JavaScript中使用,和IE 7.0。
对象上的open() 方法将HTTP方法作为参数 - 并指定为采用任何有效的HTTP方法(请参阅链接的项目编号5) - 包括GET ,POST ,HEAD ,< x6>和DELETE ,由RFC 2616指定。
作为附注,IE 7-8仅允许以下HTTP方法:"GET","POST","HEAD","PUT","DELETE","MOVE","PROPFIND","PROPPATCH","MKCOL" ,"复制","锁定","解锁"和"选项"。
我希望看到一些文档供进一步阅读,我不是说我不相信你。维基百科上的链接实际上非常好。谢谢
_method 隐藏字段解决方法
在Rails中使用,可以适应任何框架:
将隐藏的_method 参数添加到任何非GET或POST的表单:
1
<input type="hidden" name="_method" value="DELETE">
这可以通过HTML创建帮助器方法在框架中自动完成(例如Rails form_tag )
将实际的表单方法修复为POST(
在服务器上处理_method ,就像发送该方法而不是实际的POST一样
不可能的原因/历史:https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms
Santilli,你好,自从你提供这个解决方案已经有很长一段时间了,因为我是网络开发的初学者,我有一个问题,我希望你会回答。所以,你说"在服务器上处理_method并且就像发送该方法而不是实际的POST一样"你的意思是如果在视图中放入带有PUT(或DELETE)的隐藏方法,它实际上意味着PUT (或DELETE)请求权利?如果是,那么为什么在开始时使用POST方法然后使用隐藏的PUT或DELETE。 POST和PUT(或删除)之间的联系是什么:)
@Mirich表单只支持POST。所以我们发送带有额外数据的POST,服务器知道这意味着:啊,我应该像对待PUT一样对待它。
谢谢Ciro的关注和回复,所以我可以考虑这样的场景:POST是一个普遍的东西,它在其自身内部保存实际的POST,PUT,PATCH和DELETE,如果你在开始时使用POST而没有隐藏,那么它将意味着实际POST。但是如果你使用隐藏的POST(PUT或DELETE),那么你让服务器知道你想要使用POST内部的PUT或DELETE作为其里面的孩子我知道有点奇怪的比喻但是这是正确的吗? :)
@Mirich是的,我想你已经明白了。
对不起Ciro最后一件事,我想知道为什么PUT和DELETE从HTML5中删除了,因为如果你只能在表格标签的开头使用PUT或DELETE并且不使用隐藏就不会更好。请您尽快解释清除PUT和DELETE的实际原因是什么。先感谢您 :)
@Mirich我不知道HTML5中有什么变化。我不知道理由,谷歌引导我:softwareengineering.stackexchange.com/questions/114156/…
我相信这些评论专门针对浏览器,即点击链接和提交表单,而不是XMLHttpRequest 。 XMLHttpRequest 只是您在JavaScript中使用浏览器作为运行时编写的自定义客户端。
更新:澄清一下,我并不是说(虽然我写了)你写的是XMLHttpRequest ;我的意思是你编写了使用XMLHttpRequest 的代码。浏览器本身不支持XMLHttpRequest 。 XMLHttpRequest 来自JavaScript运行时,可以由浏览器托管,但不需要(请参阅Rhino)。这就是人们说浏览器不支持PUT 和DELETE 的原因 - 因为它实际上是支持它们的JavaScript。
XMLHttpRequest是JavaScript Object模型中的标准对象。
@Jacob True,但不同的浏览器有不同的JavaScript引擎。知道哪些支持PUT仍然有用。
it's actually JavaScript that is supporting them 。不是真的。 XMLHttpRequest 是一个"主机对象",这意味着它是一个将主机功能暴露给Javascript代码的对象。它不是JS本身的一部分。
是,PUT,DELETE,HEAD等HTTP方法在所有现代浏览器中都可用。
要符合XMLHttpRequest Level 2,浏览器必须支持这些方法。要检查哪些浏览器支持XMLHttpRequest Level 2,我建议使用CanIUse:
http://caniuse.com/#feat=xhr2
只有Opera Mini缺乏支持atm(juli '15),但Opera Mini缺乏对所有内容的支持。 :)
只是添加 - Safari 2及更早版本肯定不支持PUT和DELETE。我得到的印象是3,但我不再需要它来测试了。 Safari 4肯定支持PUT和DELETE。
任何人都可以确认哪个版本的Safari获得了对PUT和DELETE的支持?
任何人都可以详细说明是否所有浏览器都支持PUT&amp;删除 - 大致可以使用多长时间。注意到"CHICKEN"示例,这是否意味着完全取决于服务器来解释使用哪种方法以及JavaScript不限制方法类型......?