在HTML表单中使用PUT方法

我可以在HTML表单中使用PUT方法将数据从表单发送到服务器吗?

XHTML 1.x表单只支持GET和POST。 GET和POST是“method”属性唯一允许的值。

根据HTML标准 ,你不能 。 方法属性的唯一有效值是getpost ,对应于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您的请求,您可以使用“邮差”谷歌浏览器扩展