Веб-сервер жалуется на «множественный выбор» при использовании% 3F вместо «?» в URL - PullRequest
1 голос
/ 22 февраля 2020

Я использую Lazarus-IDE (https://www.lazarus-ide.org/) для проекта. Один из компонентов позволяет вводить URL-адрес для информации интерактивной справки, но такой компонент не принимает "?" в URL.

Я думал, что "% 3F" - это правильная кодировка "?" в URL, поэтому я использовал% 3F в своей настройке, но каким-то образом веб-браузеры, Chrome и Firefox, показали мне ошибку «Несколько вариантов выбора» с сервера, вот один пример:

http://mcx.space/wiki/index.cgi%3FDoc/mcx_help#photon

при нажатии на нее отображается

Multiple Choices
The document name you requested (/wiki/index.cgi?Doc/mcx_help) could not be found on this server. 

, но если вы скопируете / вставите декодированный URL-адрес в adderss, например

http://mcx.space/wiki/index.cgi?Doc / mcx_help # photon

, тогда он правильно отображает страницу.

что не так? % 3F рядом с буквой "D" вызвало проблему? но даже я заменил их на% 3F% 44, я все равно получаю ту же жалобу.

спасибо

1 Ответ

1 голос
/ 12 апреля 2020

что не так?

Нельзя заменить "?" (символ разделителя) с "% F3" (кодировка процента)

С RF C 3986 :

Назначение зарезервированных символов состоит в предоставить набор символов-разделителей, которые можно отличить от других данных в URI. URI, которые отличаются заменой зарезервированного символа его соответствующим октетом, закодированным в процентах, не эквивалентны . Кодирование процента в процентах зарезервированного символа или декодирование октета, закодированного в процентах, который соответствует зарезервированный символ, изменит то, как URI интерпретируется большинством приложений.

Процентное кодирование предназначено для экранирования символов , используемых в качестве данных , которые могут быть неправильно понят сервером как специальный символ. Не заменять специальный символ альтернативным представлением самого себя.

Вы не можете обмануть вышеупомянутый компонент таким образом.

...