Мы разрабатываем систему URL-адресов, которая будет указывать разделы приложения как слова, разделенные косой чертой. В частности, это GWT, поэтому соответствующие части URL-адреса будут в хэше (который будет интерпретироваться уровнем контроллера на стороне клиента):
http://site/gwturl#section1/section2
Некоторым разделам могут потребоваться дополнительные атрибуты, которые мы хотели бы указать с помощью :
, чтобы части URL-адреса были однозначными. Код будет сначала разбит на /
, а затем на :
следующее:
http://site/gwturl#user:45/comments
Конечно, мы делаем это для удобства использования URL-адресов, поэтому мы хотели бы убедиться, что ни один из этих символов, которые будут иметь особое значение, не будет закодирован в URL-адресах браузерами или любой другой системой, и в результате получится URL-адрес, подобный этот:
http://site/gwturl#user%3A45/comments <--- BAD
Безопасно ли использование двоеточия таким образом (я имею в виду, что оно не будет автоматически закодировано) для браузеров, систем закладок, даже для кода Javascript или Java?
источник
#!
чтобы указать, что страницы сохраняют состояние - см. Googlewebmastercentral.blogspot.com/2009/10/… (Это предложение было соблюдено интенсивными пользователями AJAX, такими как Facebook)Ответы:
Недавно я написал кодировщик URL, так что это довольно свежо в моей памяти.
Все символы в части фрагмента (
user:45/comments
) совершенно допустимы для URI RFC 3986 .Соответствующие части ABNF :
Помимо этих ограничений, фрагментная часть не имеет определенной структуры, кроме той, которую ей дает ваше приложение. Схема http говорит только о том, что вы не отправляете эту часть на сервер.
РЕДАКТИРОВАТЬ:
Ооо!
Несмотря на мои утверждения о спецификации URI, безоговорочный дает правильный ответ, когда указывает, что спецификация HTML 4 ограничивает имена / идентификаторы элементов .
Обратите внимание, что правила идентификаторов меняются в HTML 5 . Ограничения URI по-прежнему будут применяться (на момент написания есть некоторые нерешенные проблемы, связанные с использованием URI в HTML 5).
источник
:
это разделитель, а не разделитель.:
это внутриpchar
, что внутриfragment
, поэтому:
разрешено. @Renesis - В Википедии есть статья о ABNF en.wikipedia.org/wiki/ABNF Вы в основном смотрите на список разрешенных символов, где/
означает ИЛИ . Я не занимался программированием GWT, поэтому не знаю, как он использует фрагментную часть URI.:
во фрагменте?В дополнение к анализу Макдауэлла по стандарту URI помните также, что фрагмент должен быть допустимым именем привязки HTML. Согласно http://www.w3.org/TR/html4/types.html#type-name
Так что вам повезло. ":" явно разрешено. И никто не должен "%" - экранировать его не только потому, что "%" здесь недопустимый символ, но также потому, что фрагмент должен соответствовать имени привязки char-by-char, поэтому ни один агент не должен пытаться каким-либо образом вмешиваться в них.
Однако вы должны это проверить. Веб-стандарты не соблюдаются строго, иногда стандарты противоречат друг другу. Например, HTTP / 1.1 RFC 2616 не допускает строку запроса в URL-адресе запроса, тогда как HTML создает ее при отправке формы с помощью метода GET. То, что реализовано в реальном мире, в конце концов, выигрывает.
источник
MediaWiki и другие вики-движки используют двоеточия в своих URL-адресах для обозначения пространств имен, без каких-либо серьезных проблем.
например http://en.wikipedia.org/wiki/Template:Welcome
источник
Я бы не стал на это рассчитывать. Скорее всего, он будет закодирован как
%3A
многие пользовательские агенты.источник
Из
URLEncoder
javadoc:То
:
есть небезопасно.источник
Я не вижу, чтобы Firefox или IE8 кодировали некоторые URL-адреса Википедии , содержащие этот символ.
источник
Двоеточие используются как разделение между именем пользователя и паролем, если протокол требует аутентификации.
источник
Колон небезопасен. Посмотреть здесь
источник
Это небезопасный символ, он используется для определения того, к какому порту вы подключаетесь, когда он находится сразу после вашего доменного имени.
источник