2016-04-28 1 views
2

Следовать до Can I use an at symbol (@) inside URLs?Должны ли «@» и «% 40» относиться к URL-адресам эквивалентно?

Основываясь на top voted answer, то @ не является зарезервированным символ в URL пути (хотя это в хозяине).

Однако, учитывая путь @ на пути, является ли взаимозаменяемая форма URL-кодировки? Другими словами, twitter.com/@user строго эквивалентен twitter.com/%40user?

На практике кажется, что они часто используются взаимозаменяемо, но любопытно, если это строго так (например, [email protected] технически отличается от [email protected], но почти все относятся к ним одинаково).

В более широком смысле, когда делать символы и там нужно рассматривать тот же URL-закодированные версии, и когда разные (например, example.com/path%2Fasdf не то же самое, как example.com/path/asdf) ...

ответ

3

URI, http://twitter.com/@user и http://twitter.com/%40user являются не эквивалент.


Стандартный URI является STD 66, который в настоящее время отображается на RFC 3986 (который обновляет RFC 1738).

В разделе 6.2.2.2. Percent-Encoding Normalization определяет, как нормализовать процентов кодированного URI, чтобы сравнить их эквивалентности (после того, как верхний регистр шестнадцатеричных цифр A - F, как определено 6.2.2.1 Case Normalization).

Он говорит:

[...] некоторые URI производители процентов закодировать октетов, которые не требуют процентов-кодирования, в результате чего в URI, которые эквивалентны их не кодированного аналоги. Эти URI должны быть нормализованы путем декодирования любого процентного кодированного октета, который соответствует безоговорочному символу, как описано в Section 2.3.

Связанный раздел 2.3 перечислены незарезервированная символы, которые являются:

  • АЛЬФА (a - z, A - Z)
  • СИМВОЛЬНЫЙ (0 - 9)
  • -._~

В этом разделе также указывается, что, даже в случае отсутствия нормализации не происходит:

URIs, различающийся в замене безоговорочного характера с его соответствующим процентами закодированных US-ASCII октетом является эквивалентными: они идентифицируют тот же ресурс.

@ не является частью «безоговорочного» набора.Это часть "reserved" set, где он говорит:

URIs, которые отличаются заменой зарезервированного характера с его соответствующим процентной кодировкой октета не является эквивалентным.