22

Я наткнулся на это случайно, когда набрал неверный URL-адрес для веб-страницы в моем веб-браузере.

Почему посещение http://example.com/% вызывает ошибку HTTP 400 Bad Request? Ожидает ли сервер что-то еще после или до знака процента?

Похоже, это происходит для серверов Apache и Nginx.

2 ответа2

31

Короткий ответ

Согласно 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 .

дальнейшее чтение

9

Знак процента предназначен для вставки символа, который обычно не поддерживается в URL. Например,% 20 - это то же самое, что и пробел.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .