URL中的方括号在Tomcat中会引发异常

3

我注意到在我的Play!应用程序在Tomcat上运行时会抛出以下异常:

javax.servlet.ServletException: java.net.URISyntaxException: Illegal character in path at index 35: /K-NAAN/lyrics/Is-Anybody-Out-There[]-lyrics/3807088
    play.server.ServletWrapper.service(ServletWrapper.java:157)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.net.URISyntaxException: Illegal character in path at index 35: /K-NAAN/lyrics/Is-Anybody-Out-There[]-lyrics/3807088
    java.net.URI$Parser.fail(Unknown Source)
    java.net.URI$Parser.checkChars(Unknown Source)
    java.net.URI$Parser.parseHierarchical(Unknown Source)
    java.net.URI$Parser.parse(Unknown Source)
    java.net.URI.<init>(Unknown Source)
    play.server.ServletWrapper.parseRequest(ServletWrapper.java:241)
    play.server.ServletWrapper.service(ServletWrapper.java:132)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

根据这个帖子,方括号不是URI中的有效字符,客户端有责任对其进行编码。我在MacOS上的Chrome中遇到了这个异常,但在Firefox上没有遇到,这似乎意味着Chrome没有对它们进行编码。更糟糕的是,我相信googlebot也会遇到这个异常。
在这里应该采取什么正确的行动?
我可以调整Tomcat以接受或编码方括号吗?还是这是Play中的一个错误或行为?
还是我应该确保每个链接到我的页面的链接都已经URL编码了方括号?当然,在我的网站上可能做得到,但对于外部链接来说就不是那么容易了。

1
你说的最后一件事:你页面上的每个链接都应该使用方括号URL编码。你无法控制任意客户端向您发送无效的URL。 - jtahlborn
2个回答

1

任何想要使用在URL中不能直接使用或具有特殊含义的字符的链接都需要对这些字符进行编码。

为了让生活变得更加复杂,我注意到FireFox经常显示未编码的字符,但在地址栏中发送编码后的字符。值得使用类似于Firebug(或您的浏览器等效工具)来确保在尝试调试此类问题时知道实际发送的内容。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接