在经典的《RESTful Web Services》书中(O'Reilly出版社, ISBN 978-0-596-52926-0),第251页上说:"有些防火墙会阻止HTTP PUT和DELETE,但不会阻止POST。"
这个说法现在是否仍然正确?
如果确实如此,我就必须允许过载的POST来代替DELETE。
这个说法现在是否仍然正确?
如果确实如此,我就必须允许过载的POST来代替DELETE。
防火墙阻止 HTTP PUT/DELETE 通常是在阻止传入连接(到防火墙后面的服务器)。假设您可以控制保护应用程序的防火墙,那么您不必担心它。
此外,仅当防火墙对网络流量进行深度检查时,才能阻止PUT/DELETE。加密将防止防火墙分析URL,因此如果您使用 HTTPS (您正在使用 SSL 保护数据吗?),访问您的 Web 服务的客户端将能够使用任何标准的四个 HTTP 动词。
Sep 6 13:00:08 bal01 pound: (b6515b70) error read from 1.2.3.4: Connection timed out
:直到今天我才知道这些是被防火墙阻止的DELETE请求。值得注意的是,PUT请求可以正常通过。 - Matthew Schinckel我不会担心过载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。
一些七层防火墙可以分析到这个程度的流量。但我不确定有多少地方会进行这样的配置。您可以在serverfault.com上查看这种配置有多受欢迎(您也可以随时与您的IT工作人员核实)。
你可以按照自己的意愿配置防火墙(至少在理论上是这样),因此如果一些系统管理员阻止了HTTP PUT/DELETE,不要感到惊讶。
对于一些配置不正确的服务器而言,HTTP PUT/DELETE
存在危险:PUT会替换目标服务器上的文档(而DELETE
则会删除它们;-))。因此,一些系统管理员决定直接阻止PUT
,以防万一安全漏洞被打开。