Чи можу я використовувати символ at (@) всередині URL-адрес?


90

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

Ідея полягає в тому, що в наш час користувачів зазвичай називають "@user", то чому б не зробити сторінку користувача "@username"?


2
"користувачів зазвичай називають @user" - WAT? Але так, ви можете використовувати @ в URL-адресі.
Леннарт Регебро

1
Я думаю, що немає нічого поганого у використанні @ в url, якщо це не правильно закодовано url.
Praveen

4
@ user1671639: Я думаю, ви маєте на увазі "до тих пір, поки він правильно закодований за URL-адресою".
Леннарт Регебро

3
Щойно помітив, що Google Maps тепер використовує @ у своїх URL-адресах: google.com/maps/@0,0,2z
Zv_oDD 02.03.14

Відповіді:


126

Кодоване у відсотках…

Ви можете використовувати @символ у шляхах URI HTTP, якщо відсотково кодуєте його як %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

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


Хороші новини! Але тоді, чому це не робить 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

42

Чи можете ви використовувати @ -символ в URL-адресі? - Так, ти можеш!

Зауважте, що @ -символ, шістнадцяткове значення 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

11

У RFC такі символи:

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

зарезервовані та:

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

Тому не рекомендується використовувати ці символи без кодування.


-3

В основному ні.

@ є зарезервованим символом і повинен використовуватися лише за прямим призначенням.

Див .: http://perishablepress.com/stop-using-unsafe-characters-in-urls/ та http://www.ietf.org/rfc/rfc3986.txt

Його можна використовувати закодовано, але я не думаю, що це те, про що ви просили.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.