日常开发RESTFUL接口的过程中经常会遇到html的提交需要使用PUT和DELETE方式提交,但是表单设置好PUT和DELETE方式后却依然在提交后走到GET和POST方式,网上看到一个解答,原因如下:

这是因为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 元素的默认方法POST会有所帮助(IMO默认应该一直是POST,自从1993年Moasic*首次出现以来),但更改默认值至少需要十年时间才能通过已安装的基础进行渗透.所以用两个词来说:‘因为遗产’

为了支持当前的浏览器,作者必须使用覆盖来伪造它.我建议作者通过在HTML中加入广泛使用的a,b _method参数; 切换表单方法POST(因为请求是不安全的); 然后_method在服务器端添加识别,然后应该做任何必要的变更请求并转发它,好像它是一个真正的DELETE请求.

另请注意,由于Web浏览器是最终的HATEOAS客户端,因此需要将新状态转移给它们以进行DELETE请求.现有的API通常会返回204 No Content此类请求.您应该发送带有链接的超媒体响应,以便用户可以改进其浏览器状态.

看完作者的表述,相信你已经理解了为什么不支持后续的两种提交方式。几乎所有浏览器都是遵守Http协议族的,而最佳和最简洁的请求和响应的处理方式就是直接提交传递参数,RESTFUL的方式提交请求,传递参数的方式虽然在书写上是一种很清爽和统一化的方式,但是在解析和服务端接收请求去处理的时候会让请求过滤的过程在一定程度上进行二次处理,多数服务器软件都需要更改过滤方式,这样会也会给开发者们造成一定程度的障碍和附加劳动,这或许就是一直还未变更的原因吧。

个人学习用途博客 部分内容摘抄自网络