我最近看到许多框架决定"伪造"PUT和DELETE请求.就像Ruby on Rails一样.他们似乎在等待浏览器赶上来.他们在等待是徒劳的吗?
这甚至可以在任何地方实施吗?
Nic*_*nks 62
浏览器不支持PUT和DELETE,但它的HTML是没有.
例如,浏览器将PUT通过Javascript(AJAX)发起请求,但不通过HTML <form>提交.
这是因为HTML 4.01和最终的W3C HTML 5.0规范都说它们的form元素应该允许的唯一HTTP方法是GET和POST.
在HTML 5的开发过程中对此进行了大量讨论,并且有一次他们被添加到HTML 5中,只是被删除了.从HTML 5规范中删除其他方法的原因是因为HTML 4级浏览器永远不会支持它们(在制作它们时不是HTML的一部分); 没有JavaScript垫片就没有办法允许他们这样做; 因此,您也可以使用AJAX.
网页尝试使用与形式method="PUT"或method="DELETE"将回落到默认的方法,GET目前所有的浏览器.这打破了Web应用程序尝试在HTML表单中使用适当的方法进行预期操作,并最终导致更糟糕的结果 - GET用于删除内容!(你好爬虫.哦,哎呀!有我的数据库)
更改HTML <form>元素的默认方法POST会有所帮助(IMO默认应该一直是POST,自从1993年Moasic*首次出现以来),但更改默认值至少需要十年时间才能通过已安装的基础进行渗透.所以用两个词来说:'因为遗产'.:-(
为了支持当前的浏览器,作者必须使用覆盖来伪造它.我建议作者通过在HTML中加入广泛使用的a,b _method参数<input type=hidden name=_method value=DELETE>; 切换表单方法POST(因为请求是不安全的); 然后_method在服务器端添加识别,然后应该做任何必要的变更请求并转发它,好像它是一个真正的DELETE请求.
另请注意,由于Web浏览器是最终的HATEOAS客户端,因此需要将新状态转移给它们以进行DELETE请求.现有的API通常会返回204 No Content此类请求.您应该发送带有链接的超媒体响应,以便用户可以改进其浏览器状态.
另请参阅这些相似/相同问题的答案:
<img src=…>标签的复合错误- 应该是<image source=…>fallback</image>.
| 归档时间: |
|
| 查看次数: |
10605 次 |
| 最近记录: |