URL中的方括号会导致Tomcat中的异常

我注意到我的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编码? 当然可以在我自己的网站上,但不是外部链接。


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

为了让生活变得更加复杂一点,我注意到FireFox经常会显示未编码的字符,但是会在地址栏中发送已编码的字符。 这是值得使用像Firebug(或您的浏览器相当于),以确保你知道什么是实际发送时,试图调试这类问题。


我们遇到的特定异常似乎是Play 1.2.4中的一个错误,应通过返回代码400而不是500来修复为1.2.5。

https://groups.google.com/d/msg/play-framework/165UJ8LZ0e8/sD0na-NSxLUJ

我们还会仔细检查并确认我们所有的链接都编码了方括号(他们已经应该)。

链接地址: http://www.djcxy.com/p/12097.html

上一篇: Square brackets in URL causes exception in Tomcat

下一篇: Modify the URL without reloading the page