2012-07-27 282 views
3

我执行一个http 删除从Javascript到Java Web应用程序的请求。该网络应用程序使用Jersey来发送网址。棘手的是,我正在使用包含正斜杠的路径参数(例如“XX/6666”)。当我在Jetty(maven插件)中运行时,它工作正常,但是当我在我的生产服务器上运行时(Tomcat),它不会,即我得到一个。在HTTP请求中转义斜杠

正斜杠用%2F所以我的请求的URL看起来像

DELETE http://.../4776/shipmentOrders/XX%2F6666

难道这允许在HTTP规范逃出来的,是有可能的Jetty和Tomcat不同的方式解释这些?

+0

您能显示请求代码吗? – Raffaele 2012-07-27 07:51:40

回答

10

Tomcat(在我认为的版本5,6和7中)有意防止在路径中使用%2f来防止目录遍历攻击。据称您可以通过设置org.apache.tomcat.util.buf来关闭此保护。 UDecoder.ALLOW_ENCODED_SLASH =真。我没有亲自测试过这个,但看到网络上的其他人声称已经为他们解决了这个问题。但是,请注意,Tomcat前面的Web服务器也可能拦截并重写URL,并自动将%2f解码为正斜杠。

参考:http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html

+0

我已经解决了这个问题,所以我不会验证这一点,但我会接受你的答案,因为它非常完整。 – 2012-08-22 14:33:17

2

是的,对于这两个:它是允许的,但有些服务器可能因安全原因拒绝请求。