2

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

4

2 回答 2

1

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

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

于 2012-05-09T18:40:25.830 回答
0

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

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

我们还将仔细检查并仔细检查我们所有的链接是否编码方括号(它们已经应该)。

于 2012-05-09T22:50:20.213 回答