请求URL中的括号是合法的,但在URI(Java)中不合法?
显然,URI路径中不允许使用括号
我不确定这是否是Tomcat的问题,但我收到的请求路径包含]
换句话说
request.getRequestURL() == "http://localhost:8080/a]b"
request.getRequestURI() == "/a]b"
顺便说一句,getRequestURL()和URI通常是转义的,即http://localhost:8080/a b
request.getRequestURL() == "http://localhost:8080/a%20b"
因此,如果你尝试这样做:
new URI("http://localhost:8080/a]b")
new URI(request.getRequestURL())
它将因URI解析异常而失败。
如果我逃逸的路径将使%20
双逃逸
如何将Servlet请求URL转换为URI
# 1 楼答案
Java的URI看起来非常严格,需要对Excluded US-ASCII Charset进行转义
为了解决这个问题,我对这些字符进行编码,并且只对那些字符进行编码,减去
'%'
和'#'
,因为URL可能已经包含这些字符。我使用了Http客户端URI UTIL,由于某些原因,它不在HttpComponents中编辑:以下是一些相关的SO帖子(更多内容):