我执行从 Javascript 到 Java 网络应用程序的 http DELETE 请求。该网络应用程序使用 Jersey 来发送 url。棘手的是,我使用的路径参数包含正斜杠(例如 "XX/6666")。当我在 Jetty(maven 插件)中运行时它工作正常,但是当我在我的生产服务器(Tomcat)上运行时它没有,即我得到一个 404 .
正斜杠使用 %2F 转义,所以我的请求 URL 看起来像
删除 http://.../4776/shipmentOrders/XX%2F6666
这在 http 规范中是否允许,Jetty 和 Tomcat 是否有可能以不同的方式解释这些?
最佳答案
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
关于java - 转义 HTTP 请求中的斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11683569/