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