簡體   English   中英

URL中的方括號導致Tomcat中的異常

[英]Square brackets in URL causes exception in Tomcat

我發現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中直接使用或具有特殊含義的字符的鏈接都需要對URL中的字符進行編碼。

為了使生活稍微復雜一點,我注意到FireFox經常顯示未編碼的字符,但會在地址欄中發送已編碼的字符。 值得使用Firebug之類的東西(或與您的瀏覽器相當的東西)來確保您知道在嘗試調試此類問題時實際發送的內容。

我們遇到的特定異常似乎是Play 1.2.4中的錯誤,應該在1.2.5中通過返回代碼400而不是500進行修復。

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

我們還將仔細檢查並仔細檢查所有鏈接是否都對方括號進行了編碼(他們已經應該這樣做)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM