Czy mogę używać symbolu at (@) w adresach URL?

90

Czy używanie @symbolu jako części użytkownika jest bezpieczne? Na przykład możliwy adres URL to http://example.com/@dave.

Chodzi o to, że w dzisiejszych czasach użytkownicy są powszechnie nazywani „@user”, więc dlaczego nie utworzyć strony użytkownika „@username”?

Geoff
źródło
2
„Użytkownicy są zwykle nazywani @user” - WAT? Ale tak, możesz użyć @ w adresie URL.
Lennart Regebro
1
Myślę, że nie ma nic złego w używaniu @ w adresie URL, chyba że jest on prawidłowo zakodowany w adresie URL.
Praveen,
4
@ user1671639: Myślę, że masz na myśli „tak długo, jak jest poprawnie zakodowany w adresie URL”.
Lennart Regebro
3
Właśnie zauważyłem, że mapy Google używają teraz @ w swoich adresach URL: google.com/maps/@0,0,2z
Zv_oDD

Odpowiedzi:

126

Zakodowane w procentach…

Możesz użyć @znaku w ścieżkach HTTP URI, jeśli zakodujesz go w procentach jako %40.

Wiele przeglądarek nadal wyświetlałoby go jako @, ale np. Kiedy skopiujesz i wkleisz URI do dokumentu tekstowego, będzie %40.

… Ale także bezpośrednio

Zamiast kodowania procentowego możesz użyć go @bezpośrednio w ścieżce HTTP URI.

Zobacz składnię ścieżki identyfikatora URI. Różne niepowiązanych klauzule bok, ścieżka może zawierać znaki na segment, segment-nzlub segment-nz-nczestawie. segmenti segment-nz składa się ze znaków ze pcharzbioru, który definiuje się jako:

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

Jak widać, @jest wyraźnie wymieniony.

segment-nz-ncZestaw wymienia również @charakter wyraźnie:

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

Tak więc taki identyfikator HTTP URI jest całkowicie prawidłowy:

http://example.com/@dave

Przykład

Oto przykładowa strona Wikipedii:

  • połączyć
  • kopiuj i wklej: http://en.wikipedia.org/wiki/%22@%22_%28album%29

Jak widać, to ", (i )znaki są kodowane procent, ale @i _stosuje się bezpośrednio.

unor
źródło
Dobre wieści! Ale dlaczego nie robi tego Twitter?
Augustin Riedinger
1
@AugustinRiedinger: Czy możesz podać przykładowy adres URL? Nie używam Twittera iz tego, co widzę, nie używają @już adresów URL, ale stare (?) Adresy URL profilu nadal działają: przykład z kodowaniem procentowym @( nie działa!) Vs. przykład z użyciem @bezpośrednio (nie praca!) .
unor
Ciekawy! Rzeczywiście, działa z lub bez @w przypadku Twittera. Ich wewnętrzne linki odsyłają jednak do adresu URL bez @: twitter.com/@stackexchange
Augustin Riedinger
1
@RalphCallaway: AFAIK tylko niezarezerwowany znaków są równoważne ich procent kodowane postaci , lecz @nie jest nieograniczony . Dlatego konsumenci nie mogą tego zakładać %40i @są równoważni.
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.To nie jest prawda w przypadku Chrome.
Defozo
42

Czy możesz użyć symbolu @ w adresie URL? - Tak, możesz!

Zauważ, że @ -character, wartość szesnastkowa 40, wartość dziesiętna 64, jest zastrzeżonym znakiem dla identyfikatorów URI. Jego użycie dotyczy na przykład adresów e-mail w mailto:identyfikatorach URI mailto:[email protected]i przekazywania informacji o nazwie użytkownika i haśle w identyfikatorze URI (co jest złym pomysłem, ale możliwe):http://username:[email protected]

Jeśli potrzebujesz adresu URL, który ma w ścieżce symbol @, musisz go zakodować za pomocą tak zwanego „ kodowania adresu URL ”. Na przykład w ten sposób:http://somewhere.foo/profile/username%40somewhere.foo

Wszystkie nowoczesne przeglądarki wyświetlą to jako http://somewhere.foo/profile/[email protected] i przekonwertują każdy wpisany @ -sign na %40, więc jest łatwy w użyciu.

Wiele platform internetowych pomoże Ci również automatycznie lub za pomocą funkcji pomocniczych w konwersji do iz adresów URL zakodowanych w adresach URL.

Podsumowując: tak, możesz użyć symbolu @ -symbol w adresie URL, ale musisz upewnić się, że jest on zakodowany, ponieważ nie możesz użyć znaku @ .

Lennart Regebro
źródło
+1 doskonały. Zamiast polegać na teorii, lepiej spróbować. Właśnie o to mi chodziło, dziękuję, że podałaś tę miłą odpowiedź.
Praveen,
4
Chociaż kodowanie nie jest złą radą, @znaki nie „muszą” być kodowane w części ścieżki adresu URL ( greenbytes.de/tech/webdav/rfc3986.html#path )
brianreavis
11

W RFC następujące znaki:

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

są zarezerwowane i:

Celem znaków zastrzeżonych jest zapewnienie zestawu znaków ograniczających, które można odróżnić od innych danych w identyfikatorze URI.

Dlatego nie zaleca się używania tych znaków bez kodowania.

Salvador Dali
źródło
-3

Zasadniczo nie.

@ jest zastrzeżonym znakiem i powinien być używany tylko zgodnie z jego przeznaczeniem.

Zobacz: http://perishablepress.com/stop-using-unsafe-characters-in-urls/ i http://www.ietf.org/rfc/rfc3986.txt

Można go używać w postaci zakodowanej, ale nie sądzę, że o to pytałeś.

Najwyraźniej nowoczesne przeglądarki sobie z tym poradzą. Jednak zapytałeś, czy jest to bezpieczne i zgodnie ze specyfikacją RFC nie powinieneś go używać (niezakodowany), chyba że jest to zgodne z jego przeznaczeniem.

Jon P
źródło