在HTML表单中使用PUT方法
我可以在HTML表单中使用PUT方法将数据从表单发送到服务器吗?
XHTML 1.x表单只支持GET和POST。 GET和POST是“method”属性唯一允许的值。
根据HTML标准 ,你不能 。 方法属性的唯一有效值是get
和post
,对应于GET和POST HTTP方法。 <form method="put">
是无效的HTML,将被视为<form>
,即发送一个GET请求。
相反,许多框架只是使用POST参数来隧道HTTP方法:
<form method="post" ...> <input type="hidden" name="_method" value="put" /> ...
当然,这需要服务器端的解包。
我可以使用HTML表单中的“Put”方法将数据从HTML表单发送到服务器吗?
是的,你可以,但请记住,它不会导致一个PUT,而是一个GET请求。 如果您为<form>
标记的method
属性使用了一个无效值,浏览器将使用默认值get
。
HTML表单(直到HTML版本4(,5草案)和XHTML 1)仅支持GET和POST作为HTTP请求方法。 解决方法是通过使用由服务器读取的隐藏表单字段通过POST来引导其他方法,并相应地分派请求。 XHTML 2.0曾经计划支持表单的GET,POST,PUT和DELETE,但是它将进入HTML5的 XHTML5 ,它不打算支持PUT。 [更新到]
您也可以提供一个表单,但不是提交它,而是使用JavaScript的PUT方法创build和激发一个XMLHttpRequest。
_方法隐藏域解决方法
这个方法被Rails使用,可以适应任何框架/项目:
-
添加一个隐藏
_method
参数的任何forms不是GET或POST:<input type="hidden" name="_method" value="PUT">
这可以通过HTML创build帮助器方法在框架中自动完成(例如Rails的
form_tag
) -
将实际的表单方法修复为POST(
<form method="post"
) -
在服务器上处理
_method
,并且完全像发送该方法而不是实际的POST一样
理由/为什么不可能的历史: https : //softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms
不幸的是,现代浏览器不提供对HTTP PUT请求的本地支持。 要解决这个限制,请确保您的HTML表单的方法属性是“post”,然后在您的HTML表单中添加一个方法重写参数,如下所示:
<input type="hidden" name="_METHOD" value="PUT"/>
要testing您的请求,您可以使用“邮差”谷歌浏览器扩展