2012-05-09 42 views
2

私の再生では次の例外が発生しました。 Tomcat上で動作しているアプリケーション:this thread角括弧によるとURLの角括弧が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エンコードされた角かっこが付いていることを確認してください。私自身のウェブサイトでは可能ですが、外部リンクにはそれほど多くはありません。

+1

あなたの最後のこと:あなたのページへのすべてのリンクは、大括弧で囲まれたURLをエンコードする必要があります。無効なURLを送信している任意のクライアントを制御することはできません。 – jtahlborn

答えて

0

私たちが遭遇した特定の例外がプレイ1.2.4のバグのようですし、我々はまた、代わりに500

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

のコード400を返すことでよ1.2.5で修正される必要がありますすべてのリンクが角括弧をエンコードしていることを確認してください。

1

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

人生をちょっと複雑にするために、私はFireFoxがしばしばエンコードされていない文字を表示するが、アドレスバーにエンコードされた文字を送信することに気づいた。この種の問題をデバッグしようとしているときに実際に送信されていることを確認するには、Firebug(またはブラウザに相当するもの)のようなものを使用する価値があります。

関連する問題