Почему url-кодирование первой косой черты после домена нарушает URL?

Salvete! Я обнаружил, что определенный способ кодирования URL разрывает ссылку. Для записи %2f представляет символ косой черты: /

Теперь рассмотрим это: Оригинальная ссылка: http://dottech.org/95285/this-is-the-pacific-barreleye-a-fish-with-a-transparent-head-amazing-photo-of-the-day

JavaScript (encodeURIComponent) urlencoded ссылка: http://dottech.org%2f95285%2fthis-is-the-pacific-barreleye-a-fish-with-a-transparent-head-amazing-photo-of-the-day

Теперь, если вы вставите закодированную ссылку в адресную строку вашего браузера, она будет повреждена (Firefox, Chrome, IE).

Однако, если вы не закодируете первый косой чертой, он работает отлично: 'http://dottech.org/95285%2fthis-is-the-pacific-barreleye-a-fish-with-a-transparent-head-amazing-photo-of-the-day

Зачем?

1 ответ

Решение

/ является зарезервированным персонажем. Это не эквивалентно %2f, Если вам нужна косая черта без определенного значения, вы должны использовать закодированную форму.

См. RFC 3986: "Зарезервированные символы":

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

Причина, по которой упомянутый URL все еще работает, если вы не используете зарезервированный символ / для второго слеша: их CMS просто ищет часть идентификатора в URL. Таким образом, вы можете добавить все, что вы хотите к URL, например, следующее должно работать:

http://dottech.org/95285/hey-this-URL-got-featured-at-stackru

(Однако, кажется, что это все еще должно быть / или же %2f в их случае.)

Если вы попробуете это со статьей из Википедии, она будет перенаправлена ​​на первую страницу:

http://en.wikipedia.org/wiki%2fStack_Overflow
Другие вопросы по тегам