我看到Tomcat在this patch中向9.0.8添加了一个选项,以允许URL中的\
。由于规范RFC 7230和RFC 3986,我们有一些PDF会启动到诸如https://mrbusche.com/?FilePath=\manuals\Commerciallines\eManual\az.pdf
之类的页面,Tomcat 9.0.7当前阻止了URL。
例外
Type Exception Report
Message Invalid character found in the request target.
The valid characters are defined in RFC 7230 and RFC 3986
Description The server cannot or will not process the request due to something
that is perceived to be a client error (e.g., malformed request syntax
, invalid request message framing, or deceptive request routing).
Exception
java.lang.IllegalArgumentException: Invalid character found in the request target.
The valid characters are defined in RFC 7230 and RFC 3986
在Tomcat 9.0.7上这根本不可能吗?
这是我的Tomcat连接器
<Connector
port="4005"
connectionTimeout="20000"
maxHttpHeaderSize="8192"
minSpareThreads="25"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100"
scheme="https"
secure="true"
URIEncoding="UTF-8"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="150"
relaxedQueryChars="\"
SSLEnabled="true" >
</Connector>
答案 0 :(得分:1)
假设您提到的问题62273准确地解决了您的问题并且需要解决该问题,则必须升级到Apache Tomcat 9.0.8。
Apache Tomcat 9 changelog指出,此问题已在9.0.8版及更高版本中得到修补。 希望有帮助。
编辑:这也是stated by @MarkThomas in a text comment on the bug discussion,在我看来很光荣,我想在这里完整引用:
向Tomcat添加额外的代码以说明规格 其他组件不合规是错误的解决方案。正确的 解决方案是针对不兼容的组件打开错误。 不幸的是,在这种情况下,那些其他组件都是主要的 浏览器供应商,他们不接受其行为是 不正确我还没有看到令人信服的论点,为什么 浏览器不应实施RFC 7230和RFC 3986。
仅解决不符合规范的浏览器行为 鼓励供应商继续忽略规格并导致 从长远来看,更大的互操作性问题。然而 替代方案是为大量用户破坏大量应用程序。 因此,很遗憾我实现了此增强功能 当前所有受支持的Tomcat版本。
已修复:
- 9.0.8起的行李箱
- 8.5.x以及8.5.31起
- 8.0.x以及8.0.52起
- 7.0.x和7.0.87起