Могу ли я использовать символ (@) внутри URL-адресов?

90

Безопасно ли использовать @символ как часть пользователя? Например, возможный URL-адрес будет http://example.com/@dave.

Идея заключается в том, что в настоящее время пользователей обычно называют «@user», так почему бы не сделать страницу пользователя «@username»?

Джефф
источник
2
«пользователей обычно называют @user» - WAT? Но да, вы можете использовать @ в URL-адресе.
Леннарт Регебро
1
Я думаю, что нет ничего плохого в использовании @ в URL-адресе, если он не закодирован правильно.
Praveen
4
@ user1671639: Я думаю, вы имеете в виду «при условии, что URL-адрес правильно закодирован».
Леннарт Регебро
3
Только что заметил, что карты Google теперь используют @ в своих URL: google.com/maps/@0,0,2z
Zv_oDD

Ответы:

126

Закодировано в процентах…

Вы можете использовать этот @символ в путях HTTP URI, если вы закодируете его в процентах как %40.

Многие браузеры будут отображать его по-прежнему как @, но, например, когда вы копируете и вставляете URI в текстовый документ, он будет %40.

… Но также напрямую

Вместо процентного кодирования вы можете использовать его @непосредственно в пути HTTP URI.

См. Синтаксис пути к URI. Различные несвязанные положения в стороне, путь может состоять из символов в segment, segment-nzили segment-nz-ncнаборе. segmentи segment-nz состоят из символов из pcharнабора, который определяется как:

pchar = unreserved / pct-encoded / sub-delims / ":" / "@"

Как видите, @явно указан.

В segment-nz-ncнаборе также @явно указан символ:

segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )

Итак, такой HTTP-URI полностью действителен:

http://example.com/@dave

пример

Вот пример страницы в Википедии:

  • ссылка
  • скопировать и вставить: http://en.wikipedia.org/wiki/%22@%22_%28album%29

Как вы можете видеть, ", (и )символы процентов закодированных, но @и _используются непосредственно.

unor
источник
Хорошие новости! Но тогда почему Twitter этого не делает?
Августин Ридинджер
1
@AugustinRiedinger: Не могли бы вы предоставить пример URL? Я не использую Twitter и, судя по тому, что я вижу, они больше не используются @в URL-адресах, но старые (?) URL-адреса профиля все еще работают: пример с процентным кодированием @( не работает!) По сравнению с примером с @прямым использованием (работает ли работать!) .
unor
Интересно! Действительно, работает с @Twitter или без него . Их внутренние ссылки действительно относятся к URL-адресу, @хотя: twitter.com/@stackexchange
Августин Ридингер,
1
@RalphCallaway: AFAIK только незарезервированные символы эквивалентны их форме , закодированной в процентах , но @не безоговорочно . Таким образом , потребители не должны предполагать , что %40и @эквивалентны.
unor
1
Many browsers would display it still as @, but e.g. when you copy-and-paste the URI into a text document, it will be %40.Это не относится к Chrome.
Defozo
43

Можете ли вы использовать символ @ в URL-адресе? - Да, можно!

Обратите внимание, что @ -character, шестнадцатеричное значение 40, десятичное значение 64, являются зарезервированными символами для URI. Он используется, например, для таких вещей, как адреса электронной почты в mailto:URI mailto:username@somewhere.fooи для передачи информации об имени пользователя и пароле в URI (что является плохой идеей, но возможно):http://username:password@somewhere.foo

Если вам нужен URL-адрес, в пути которого есть символ @, вам необходимо его закодировать с помощью так называемого « URL-кодирования ». Например так:http://somewhere.foo/profile/username%40somewhere.foo

Все современные браузеры будут отображать это как http://somewhere.foo/profile/username@somewhere.foo и преобразует любое введенное с помощью @ -sign в %40, так что им легко пользоваться.

Многие веб-фреймворки также помогут вам автоматически или с помощью вспомогательных функций преобразовывать URL-адреса в URL-адреса и обратно.

Итак, вкратце : да, вы можете использовать @ -символ в URL-адресе, но вы должны убедиться, что он закодирован, так как вы не можете использовать @ -символ .

Леннарт Регебро
источник
+1 отлично. Вместо того, чтобы полагаться на теорию, лучше попробовать. Я имел в виду именно это, спасибо за хороший ответ.
Praveen
4
Хотя кодирование - неплохой совет, @символы не «нужно» кодировать в части пути URL- адреса ( greenbytes.de/tech/webdav/rfc3986.html#path )
brianreavis 07
11

В RFC следующие символы:

! * '(); : @ & = + $, /? % # []

зарезервированы и:

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

Поэтому не рекомендуется использовать эти символы без кодировки.

Сальвадор Дали
источник
-3

В основном нет.

@ является зарезервированным символом и должен использоваться только по прямому назначению.

См. Http://perishablepress.com/stop-using-unsafe-characters-in-urls/ и http://www.ietf.org/rfc/rfc3986.txt.

Его можно использовать в кодировке, но я не думаю, что это то, о чем вы спрашивали.

Судя по всему, современные браузеры справятся с этим. Однако вы спросили, безопасно ли это, и в соответствии со спецификацией RFC вы не должны использовать его (незакодированный), если он не используется по прямому назначению.

Джон П
источник