在经典的“RESTful Web Services”一书(O'Reilly,ISBN 978-0-596-52926-0)中,它在第 251 页上说“一些防火墙阻止 HTTP PUT 和 DELETE,但不阻止 POST”。
这仍然是真的吗?
如果这是真的,我必须允许重载的 POST 来代替 DELETE。
阻止 HTTP PUT/DELETE 的防火墙通常会阻止传入连接(到防火墙后面的服务器)。假设您可以控制保护您的应用程序的防火墙,您不必担心它。
此外,防火墙只有在对网络流量执行深度检查时才能阻止 PUT/DELETE。加密将阻止防火墙分析 URL,因此如果您使用 HTTPS(您正在使用 SSL 保护您的数据,对吗?)访问您的 Web 服务的客户端将能够使用标准的四个 HTTP 动词中的任何一个。
一些 7 层防火墙可以分析这种程度的流量。但我不确定有多少地方会这样配置它们。您可以在 serverfault.com 上查看此类配置的受欢迎程度(您也可以随时咨询您的 IT 人员)
我不会担心重载 POST 以支持 DELETE 请求。
HTML 4.0 和 XHTML 1.0仅支持 GET 和 POST 请求(通过 ),因此通过隐藏的表单字段来隧道化 PUT/DELETE 是司空见惯的,该字段由服务器读取并适当地分流。此技术保留了跨浏览器的兼容性,并允许您忽略任何防火墙问题。
Ruby On Rails 和 .NET 都以这种方式处理 RESTful 请求。
顺便说一句,目前通过 XMLHttpRequest 请求对象完全支持 GET、POST、PUT 和 DELETE 请求。XHTML 2.0 的官方也支持 GET、POST、PUT 和 DELETE。
您可以将防火墙配置为您想要的任何东西(至少在理论上),因此如果某些系统管理员确实阻止了 HTTP PUT/DELETE,请不要感到惊讶。
危险HTTP PUT/DELETE
在于一些错误配置的服务器:PUT 替换DELETE
目标服务器上的文档(并删除它们;-)。因此,一些系统管理员决定在某处打开裂缝时进行阻止PUT
。
当然,我们谈论的是在“第 7 层”起作用的防火墙,而不仅仅是在 IP 层;-)