Кодирование двойных кавычек в Apache

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, похоже, не позволяет пользователям переписывать параметры запроса. Есть предложения?

0
задан 12 June 2017 в 20:58
1 ответ

Это задача клиента, то есть браузера. Если вы наберете 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    
2
ответ дан 4 December 2019 в 13:32

Теги

Похожие вопросы