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

4

2 に答える 2

1

URL で直接使用できない文字や特別な意味を持つ文字を使用するリンクでは、URL 内の文字をエンコードする必要があります。

生活をもう少し複雑にするために、FireFox はエンコードされていない文字を表示するのに、エンコードされた文字をアドレス バーに送信することが多いことに気付きました。この種の問題をデバッグしようとするときに、実際に何が送信されているかを確認するために、Firebug (またはブラウザの同等のもの) などを使用する価値があります。

于 2012-05-09T18:40:25.830 に答える
0

私たちが遭遇した特定の例外は Play 1.2.4 のバグのようで、1.2.5 ではコード 500 ではなくコード 400 を返すことで修正されるはずです。

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

また、すべてのリンクが角かっこをエンコードしていることを再確認します (これは既に行われているはずです)。

于 2012-05-09T22:50:20.213 に答える