Чем объясняется разное отношение Firefox и Safari к предоставленным пользователем URI, содержащим более одного символа #?Какой правильный'? - PullRequest
6 голосов
/ 05 мая 2011

В Firefox 4.0.1 вставьте следующее в адресную строку

http://www.w3.org/#one#two

Обратите внимание, что браузер переходит на первую страницу w3.org, а в адресной строке по-прежнему отображается

http://www.w3.org/#one#two

В Safari 5.0.4 сделайте то же самое. Обратите внимание, что браузер также перемещается, но текст в адресной строке изменен на

http://www.w3.org/#one%23two

Обратите внимание, что первое появление хеша в строке не изменяется, а второе изменяется в закодированную форму (иначе "escape")% 23.

Кажется разумным предположить, что Safari пытается преобразовать предоставленный пользователем URI в ссылку, которая соответствует его идее действительного URI. Firefox в этом случае не выполняет преобразование.

Я хотел бы объяснить разницу в поведении.

Документ по адресу http://www.ecma -international.org / публикации / стандарты / Ecma-262.htm является одной ссылкой на то, какую форму принимает действительный URI. В разделе 15.1.3.1 в нем говорится о том, что браузеры не могут экранировать URI.

Символ «#» не декодируется из escape-последовательностей, даже если он не является зарезервированным символом URI.

Что это, вероятно, подразумевает, так это то, что оно относится к # символам по всей строке URI, а не только к первому вхождению.

В заключение мой вопрос:

  • Соответствуют ли обе формы ссылки последнему стандарту для действительных URI?
  • Если они оба действительны, какое поведение браузера является наиболее подходящим?

1 Ответ

2 голосов
/ 05 мая 2011

RfC 3986 (определение того, как выглядят URI и, следовательно, URL-адреса и что означают части) не допускает двух # символов в одном URL-адресе, по крайней мере, в моем чтении.Что сводит вопрос к следующему:

  • Лучше ли перенаправить ошибку пользователя в веб-приложение (где дизайнер мог совершить ту же ошибку),
  • или нет?лучше преобразовать пользовательский ввод во что-то тесно связанное, но допустимое?

Также обратите внимание, что RfC явно перечисляет # как зарезервированный символ, поэтому стандарт ECMA неверен в том, что вы цитировали выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...