Чому вказівка ​​відсотків у URL-адресі викликає помилку HTTP 400?


22

Я натрапив на це випадково, коли заплутав URL-адресу веб-сторінки у своєму веб-браузері.

Чому відвідування http://example.com/%спричиняє помилку HTTP 400? Чи очікує сервер щось інше після або перед знаком відсотків?

Здається, це трапляється для серверів Apache та Nginx.


Відповіді:


32

Коротка відповідь

Відповідно до 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, є або зарезервованими, або незарезервованими ( або відсотковими символами як частиною відсоткового кодування ).

Джерело: Percent-encoding - Процентне кодування в URI

Якщо ви хочете , щоб вставити буквальний %символ, ви повинні використовувати його процентний кодоване подання: %25.

Подальше читання


Я не розумію. Якщо я замаскую знак "%" символом "% 25", файл все одно не буде поданий, але помилка 400 буде видана в нашому сценарії (Apache -> JKMount -> Tomcat)
fiffy

Якщо у вас є наступне RewriteRule RewriteRule (.*) xyz/$1(де xyz - будь-яке ім'я папки) у .htaccess, вам слід подвоїти -кодувати% як% 2525.
Марко Марсала

9

Знак відсотка призначений для вставки символу, який зазвичай не підтримується в URL-адресі. Наприклад,% 20 - це те саме, що і пробіл.


4
А щоб вставити сам відсотковий символ, це%25
Robotnik

A +- це швидкий спосіб кодування простору. Якщо ви хочете справжній знак плюс, використовуйте його шістнадцятковий код,% 2B.
Філ Перрі

3
+ - правильне кодування для простору лише в рядку запиту. % 20 - це правильне кодування в іншому місці URL-адреси.
Іден Таунсенд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.