Kami merancang sistem URL yang akan menentukan bagian aplikasi sebagai kata-kata yang dipisahkan oleh garis miring. Secara khusus, ini ada di GWT, jadi bagian yang relevan dari URL akan ada di hash (yang akan ditafsirkan oleh lapisan pengontrol di sisi klien):
http://site/gwturl#section1/section2
Beberapa bagian mungkin memerlukan atribut tambahan, yang ingin kami tentukan dengan a :
, agar bagian URL tidak ambigu. Kode akan terpecah pertama /
, kemudian :
, seperti ini:
http://site/gwturl#user:45/comments
Tentu saja, kami melakukan ini untuk keramahan url, jadi kami ingin memastikan bahwa tidak satu pun dari karakter ini yang memiliki arti khusus akan dienkode-url oleh browser, atau sistem lain, dan berakhir dengan url seperti ini:
http://site/gwturl#user%3A45/comments <--- BAD
Apakah menggunakan titik dua dengan cara ini aman (maksud saya tidak akan secara otomatis dikodekan) untuk browser, sistem bookmark, bahkan Javascript atau kode Java?
sumber
#!
untuk menunjukkan bahwa halaman tersebut berstatus stateful - lihat googlewebmastercentral.blogspot.com/2009/10/… (Proposal ini telah ditaati oleh pengguna AJAX berat seperti Facebook)Jawaban:
Saya baru-baru ini menulis encoder URL, jadi ini cukup segar dalam pikiran saya.
Semua karakter di bagian fragmen (
user:45/comments
) legal untuk RFC 3986 URI .Bagian-bagian yang relevan dari ABNF :
Terlepas dari batasan ini, bagian fragmen tidak memiliki struktur yang ditentukan selain yang diberikan aplikasi Anda. Skemanya, http, hanya mengatakan bahwa Anda tidak mengirim bagian ini ke server.
EDIT:
D'oh!
Terlepas dari pernyataan saya tentang spesifikasi URI, irreputable memberikan jawaban yang benar ketika dia menunjukkan bahwa spesifikasi HTML 4 membatasi nama / pengenal elemen .
Perhatikan bahwa aturan pengenal berubah di HTML 5 . Pembatasan URI akan tetap berlaku (pada saat penulisan, ada beberapa masalah yang belum terselesaikan seputar penggunaan URI HTML 5).
sumber
:
merupakan gen-delim, bukan sub-delim.:
masukpchar
, yang masukfragment
, jadi:
diperbolehkan. @Renesis - Wikipedia memiliki artikel di ABNF en.wikipedia.org/wiki/ABNF Anda pada dasarnya melihat daftar karakter yang diizinkan, di mana/
artinya OR . Saya belum melakukan pemrograman GWT, jadi saya tidak tahu bagaimana ia menggunakan bagian fragmen URI.:
di dalam fragmen?Selain analisis McDowell tentang standar URI, ingat juga bahwa fragmen harus berupa nama jangkar HTML yang valid. Menurut http://www.w3.org/TR/html4/types.html#type-name
Jadi Anda beruntung. ":" diizinkan secara eksplisit. Dan tidak ada yang harus "%" - menghindarinya, tidak hanya karena "%" adalah char ilegal di sana, tetapi juga karena fragmen harus cocok dengan nama anchor char-by-char, oleh karena itu tidak ada agen yang mencoba merusaknya dengan cara apa pun.
Bagaimanapun Anda harus mengujinya. Standar web tidak diikuti dengan ketat, terkadang standarnya saling bertentangan. Misalnya HTTP / 1.1 RFC 2616 tidak mengizinkan string kueri di URL permintaan, sementara HTML membuatnya saat mengirimkan formulir dengan metode GET. Apa pun yang diterapkan di dunia nyata akan menang pada akhirnya.
sumber
MediaWiki dan mesin wiki lainnya menggunakan titik dua di URL mereka untuk menunjukkan ruang nama, tanpa masalah besar.
mis. http://en.wikipedia.org/wiki/Template:Welcome
sumber
Saya tidak akan mengandalkannya. Ini kemungkinan akan mendapatkan url yang dikodekan
%3A
oleh banyak agen pengguna.sumber
Dari
URLEncoder
javadoc:Artinya,
:
tidak aman.sumber
Saya tidak melihat Firefox atau IE8 mengkodekan beberapa URL Wikipedia yang menyertakan karakter tersebut.
sumber
Titik dua digunakan sebagai pemisah antara nama pengguna dan kata sandi jika protokol memerlukan otentikasi.
sumber
Usus besar tidak aman. Lihat disini
sumber
Ini bukan karakter yang aman dan digunakan untuk membedakan port mana yang Anda sambungkan ketika berada tepat setelah nama domain Anda
sumber