Tomcat запрещает любое присутствие символов '"' (двойных кавычек) в URL, это рассматривается как недопустимый символ согласно RFC 7230.
Однако у меня много таких символов. клиенты службы, которые все еще обращаются к моей службе с URL-адресами типа http://abcd.com/uservice?user= "donald"
, я ищу способы переписать этот URL-адрес на http: // abcd. com / userservice? user =% 20donald% 20
. Мне нужно сделать это для нескольких служб (~ 20).
Я посмотрел https://stackoverflow.com/questions/1279681/mod-rewrite-replace-underscores-with-dashes , но это не помогает моему варианту использования. Apache, похоже, не позволяет пользователям переписывать параметры запроса. Есть предложения?
Это задача клиента, то есть браузера. Если вы наберете http://example.com/uservice?user= "donald"
в адресной строке, оно будет автоматически закодировано с помощью процентного кодирования ( RFC 3986, 2.1 ; упоминается в RFC 7230, 2.7.3 ), в результате чего фактический запрос начинается с:
GET /userservice?user=%22donald%22 HTTP/1.1
Host: example.com
% 20
, который вы упомянули в своем вопросе, аналогичен символу пробела ASCII, 0x20
, тогда как % 22
представляет ASCII "
(двойные кавычки, 0x22
). Кроме того, буквальный %
будет стал % 25
и т. д.
Вы можете переписать % 22
в % 20
, но я думаю, что это скорее всего ошибка.
Просто чтобы Для большей полноты, вот диаграмма. Для процентного кодирования посмотрите столбец Hex.
ASCII Hex Symbol ASCII Hex Symbol ASCII Hex Symbol ASCII Hex Symbol
32 20 (space) 39 27 ' 46 2E . 95 5F _
33 21 ! 40 28 ( 47 2F / 96 60 `
34 22 " 41 29 ) 64 40 @ 123 7B {
35 23 # 42 2A * 91 5B [ 124 7C |
36 24 $ 43 2B + 92 5C \ 125 7D }
37 25 % 44 2C , 93 5D ] 126 7E ~
38 26 & 45 2D - 94 5E ^ 127 7F