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