Dapatkah saya menggunakan simbol at (@) di dalam URL?

90

Apakah aman menggunakan @simbol sebagai bagian dari pengguna? Misalnya, kemungkinan URL adalah http://example.com/@dave.

Idenya adalah, saat ini, pengguna biasa dipanggil "@user", jadi mengapa tidak membuat halaman pengguna "@namapengguna"?

Geoff
sumber
2
"pengguna biasa dipanggil @user" - WAT? Tapi ya, Anda bisa menggunakan @ di URL.
Lennart Regebro
1
Saya rasa tidak ada yang salah dalam menggunakan @ di url kecuali jika url dikodekan dengan benar.
Praveen
4
@ user1671639: Saya rasa yang Anda maksud "selama URL dikodekan dengan benar".
Lennart Regebro
3
Baru saja melihat peta google sekarang menggunakan @ di URL-nya: google.com/maps/@0,0,2z
Zv_oDD

Jawaban:

126

Persen-dikodekan ...

Anda dapat menggunakan @karakter di jalur HTTP URI jika Anda mengenkodenya dalam persen sebagai %40.

Banyak browser akan menampilkannya dengan diam @, tetapi misalnya saat Anda menyalin dan menempelkan URI ke dalam dokumen teks, itu akan menjadi %40.

… Tetapi juga secara langsung

Sebagai ganti persen-encoding-nya, Anda dapat menggunakan @langsung di jalur HTTP URI.

Lihat sintaks untuk jalur URI. Berbagai klausul terkait samping, jalan dapat terdiri dari karakter dalam segment, segment-nzatau segment-nz-ncset. segmentdan segment-nz terdiri dari karakter dari pcharhimpunan, yang didefinisikan sebagai:

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

Seperti yang Anda lihat, @daftar secara eksplisit.

The segment-nz-ncset juga mencantumkan @karakter secara eksplisit:

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

Jadi, HTTP URI seperti ini benar-benar valid:

http://example.com/@dave

Contoh

Berikut adalah contoh halaman Wikipedia:

  • tautan
  • Salin dan tempel: http://en.wikipedia.org/wiki/%22@%22_%28album%29

Seperti yang Anda lihat, ", (, dan )karakter persen-dikodekan, tetapi @dan _digunakan secara langsung.

unor
sumber
Kabar baik! Tapi kemudian, mengapa Twitter tidak melakukan ini?
Augustin Riedinger
1
@AugustinRiedinger: Bisakah Anda memberikan contoh URL? Saya tidak menggunakan Twitter, dan dari apa yang saya lihat mereka tidak lagi menggunakan @di URL, tetapi URL profil lama (?) Masih berfungsi: contoh dengan persen-encoded @( tidak berfungsi!) Vs. contoh menggunakan @langsung (tidak bekerja!) .
unor
Menarik! Memang, berfungsi dengan atau tanpa @dalam kasus Twitter. Tautan dalam mereka merujuk url tanpa melalui @: twitter.com/@stackexchange
Augustin Riedinger
1
@RalphCallaway: AFAIK hanya unreserved karakter setara dengan bentuk mereka persen-dikodekan , tetapi @tidak unreserved . Jadi konsumen tidak boleh berasumsi %40dan @setara.
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.Itu tidak benar untuk Chrome.
Defozo
42

Bisakah Anda menggunakan @ -symbol di URL? - Ya kamu bisa!

Perhatikan bahwa @ -karakter, nilai heksadesimal 40, nilai desimal 64, adalah karakter yang dicadangkan untuk URI. Penggunaannya adalah untuk hal-hal seperti alamat email di mailto:URI, misalnya mailto:[email protected]dan untuk meneruskan informasi nama pengguna dan sandi pada URI (yang merupakan ide yang buruk, tapi mungkin):http://username:[email protected]

Jika Anda menginginkan URL yang memiliki @ -symbol di sebuah jalur, Anda perlu mengenkodenya, yang disebut " URL-encoding ". Contohnya seperti ini:http://somewhere.foo/profile/username%40somewhere.foo

Semua browser modern akan menampilkan ini sebagai http://somewhere.foo/profile/[email protected] , dan akan mengonversi semua jenis @ -sign to %40, sehingga mudah digunakan.

Banyak kerangka kerja web juga akan membantu Anda baik secara otomatis, atau dengan fungsi pembantu, untuk mengonversi ke dan dari URL yang dikodekan URL.

Jadi, ringkasnya : Ya, Anda dapat menggunakan @ -symbol di URL, tetapi Anda harus memastikannya dikodekan, karena Anda tidak dapat menggunakan @ -karakter .

Lennart Regebro
sumber
+1 sempurna. Daripada menyampaikan teori lebih baik dicoba. Ini adalah hal yang saya maksud, terima kasih telah menjadikan ini sebagai jawaban yang bagus.
Praveen
4
Meskipun pengkodean bukanlah saran yang buruk, @karakter tidak "perlu" dikodekan di bagian jalur url ( greenbytes.de/tech/webdav/rfc3986.html#path )
brianreavis
11

Di RFC karakter berikut:

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

dicadangkan dan:

Tujuan karakter yang dicadangkan adalah untuk menyediakan sekumpulan karakter pembatas yang dapat dibedakan dari data lain dalam URI.

Jadi tidak disarankan menggunakan karakter ini tanpa encoding.

Salvador Dali
sumber
-3

Pada dasarnya tidak.

@ adalah karakter khusus dan hanya boleh digunakan untuk tujuan yang dimaksudkan.

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

Ini dapat digunakan dengan kode, tapi menurut saya bukan itu yang Anda tanyakan.

Tampaknya peramban modern akan menangani ini. Bagaimanapun Anda bertanya apakah ini aman dan sesuai dengan spesifikasi RFC Anda tidak boleh menggunakannya (tidak dikodekan) kecuali untuk tujuan yang dimaksudkan.

Jon P.
sumber