在HTML表单中使用PUT方法

MyT*_*tle 153 html forms

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

phi*_*hag 179

根据HTML标准,你不能.method属性的唯一有效值是getpost,对应于GET和POST HTTP方法.<form method="put">是无效的HTML,将被视为<form>,即发送GET请求.

相反,许多框架只是使用POST参数来隧道传输HTTP方法:

<form method="post" ...>
  <input type="hidden" name="_method" value="put" />
...
Run Code Online (Sandbox Code Playgroud)

当然,这需要服务器端解包.

  • @hakre HTML5已经是事实上的标准,并且可能会随着时间的推移而发展.W3C称之为"草案"的文件是至少3年开发的文档,浏览器供应商的输入超过99%,并且已经实现(至少在涉及到这个和大多数非深奥的部分时)所有这些永远.但是,对于nitpickers,[这里是相同的定义](http://www.w3.org/TR/html401/interact/forms.html#adef-method)在HTML 4.01(W3C术语中的技术请求)中. (12认同)
  • 你一直在联系草案,而不是最终标准.注意,稳定的HTML版本也没有提供它. (3认同)
  • 请不要感到被冒犯,我已经写过这只是一个注释,[其他 HTML 版本也不提供它](http://stackoverflow.com/questions/8054165/using-put-method-in- html-form/8054444#8054444)(XHTML 2 略有例外,但现在这是一个过时的草案)。 (3认同)
  • @hakre 请放心,我一点都没有被冒犯。挑剔挑剔者,我必须评论说 XHTML 在技术上不是 HTML,尽管人们可能会发现一两个相似之处;) (3认同)
  • 高级api框架支持这一点,包括Slim. (2认同)

dqh*_*cks 111

XHTML 1.x表单仅支持GET和POST.GET和POST是"method"属性唯一允许的值.

  • XHTML有点过时了.仍然看起来在html5中有两个值是有效的https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-method (5认同)

hak*_*kre 41

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

是的,你可以,但请记住它不会导致PUT而是GET请求.如果method<form>标记的属性使用无效值,则浏览器将使用默认值get.

HTML表单(最高为HTML版本4(,5草稿)和XHTML 1)仅支持GET和POST作为HTTP请求方法.解决方法是使用隐藏的表单字段通过POST隧道其他方法,该字段由服务器读取并相应地分派请求.XHTML 2.0次计划支持GET,POST,PUT和DELETE的形式,但它进入XHTML5HTML5,它不打算支持PUT.[更新到]

您也可以提供表单,但不是提交表单,而是使用带有JavaScript的PUT方法创建和触发XMLHttpRequest.


Cir*_*四事件 20

_method隐藏字段解决方法

Rails使用此方法,可以适应任何框架/项目:

  • 将隐藏_method参数添加到任何非GET或POST的表单:

    <input type="hidden" name="_method" value="PUT">
    
    Run Code Online (Sandbox Code Playgroud)

    这可以通过HTML创建帮助器方法(例如Rails _method)在框架中自动完成

  • 将实际的表单方法修复为POST(<form method="post")

  • _method服务器上的进程,就像发送了该方法而不是实际的POST一样

不可能的原因/历史:https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms


Cod*_*ife 15

对于使用 Laravel 的人

<form method="post" ...>
@csrf
@method('put')
...
</form>
Run Code Online (Sandbox Code Playgroud)

  • 尽管SO明智地鼓励人们不要仅发布代码答案,但有时......就像这种情况......这就是你所需要的。 (6认同)
  • 代码不仅仅是解决方案。请也添加描述。谢谢。 (2认同)

Tof*_*eeq 8

遗憾的是,现代浏览器不提供对HTTP PUT请求的本机支持.要解决此限制,请确保HTML表单的方法属性为"post",然后将方法覆盖参数添加到HTML表单中,如下所示:

<input type="hidden" name="_METHOD" value="PUT"/>
Run Code Online (Sandbox Code Playgroud)

要测试您的请求,您可以使用"Postman"Google Chrome扩展程序

  • 它应该适用于任何方法,包括 DELETE 和 PATCH 等 (2认同)