[英]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.