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エンコードされていることを確認する必要がありますか?もちろん、私自身のWebサイトでも可能ですが、外部リンクについてはそれほど多くはありません。