Я заметил следующее исключение в моем 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, и ответственность за это лежит на клиенте. их кодировать? Я получаю это исключение в Chrome в MacOS, но не в Firefox, что, похоже, подразумевает, что Chrome их не кодирует. Что еще хуже, я почти уверен, что googlebot также сталкивается с этим исключением.
Каков правильный образ действий здесь?
Могу ли я настроить Tomcat так, чтобы он каким-то образом принимал или кодировал квадратные скобки? Или это ошибка или поведение в Play?
Или я должен просто убедиться, что каждая ссылка на мои страницы имеет URL-кодировку в квадратных скобках? Можно, конечно, на моем собственном сайте, но не столько для внешних ссылок.