我有一个客户端,它提出的请求如下所示:
https://app.foo.com/foo//bar/baz/
当我的foo war在tomcat中托管时,URL解析并返回它应该返回的任何内容。我最近尝试在jetty中运行相同的war文件,当在jetty中运行时,相同的URI返回一个400的错误请求。有没有办法配置Jetty不关心这个,如果它在URL中看到一行中有2+个斜杠,就像Tomcat那样把它当作只有1个斜杠来处理?
我有一个客户端,它提出的请求如下所示:
https://app.foo.com/foo//bar/baz/
当我的foo war在tomcat中托管时,URL解析并返回它应该返回的任何内容。我最近尝试在jetty中运行相同的war文件,当在jetty中运行时,相同的URI返回一个400的错误请求。有没有办法配置Jetty不关心这个,如果它在URL中看到一行中有2+个斜杠,就像Tomcat那样把它当作只有1个斜杠来处理?
1条答案
按热度按时间u3r8eeie1#
根据URI规范,这被认为是一个“模糊的空路径段”,因此Jetty中的默认配置在看到它们时返回“400 Bad Path”。
URI规范中有许多部分会导致解释不明确,而所有这些部分都在Jetty
UriCompliance.Violation
中指定。请参阅:
以下是可以启用/禁用的UriCompliance违规。
| 关键字|项目名称|规格参考|
| - -|- -|- -|
|
AMBIGUOUS_PATH_SEGMENT
个|允许不明确的路径段,例如/foo/%2e%2e/bar
| RFC 3986协议||
AMBIGUOUS_EMPTY_SEGMENT
|允许不明确的空段,例如//
| RFC 3986协议||
AMBIGUOUS_PATH_SEPARATOR
|允许在URI段中使用不明确的路径分隔符,例如/foo/b%2fr
| RFC 3986协议||
AMBIGUOUS_PATH_PARAMETER
|允许URI段中存在不明确的路径参数,例如/foo/..;/bar
或/foo/%2e%2e;param/bar
| RFC 3986协议||
AMBIGUOUS_PATH_ENCODING
个|允许在URI段中使用不明确的路径编码,例如/%2557EB-INF
| RFC 3986协议||
UTF16_ENCODINGS
|允许UTF-16编码,例如/foo%u2192bar
| w3c/草稿-数据-虹膜|UriCompliance
在ServerConnector
类使用的HttpConfiguration
中配置。如果您选择通过
UriCompliance
配置允许这些,请记住您所做的一切都是允许它们进入Jetty。这是因为许多关心空路径段的用户实际上想要额外的空路径段,以用于gRPC、REST等将荣誉空段的工具。
Jetty提供了一个压缩选项,形式为
RewriteHandler
,它是CompactPathRule
。servlet规范Maven组最近讨论了RFC 3986中指定的这些不明确的路径行为,但没有讨论
//
的具体情况。