Alat pembangun · URL pengekod & penyahkod
Daripada RFC 1738 kepada URL Standard: bagaimana peraturan pengekodan peratus telah berkembang
· Latar belakang
pengekodan url rfc-sejarah piawaian web
Peraturan untuk melepaskan aksara dalam URL telah ditulis semula beberapa kali sejak 1994. Siaran ini mengikuti RFC 1738, RFC 2396, RFC 3986 dan WHATWG URL dan menerangkan perkara yang berubah setiap kali.
Daripada RFC 1738 kepada URL Standard—bagaimana peraturan pengekodan peratus berkembang
Tilde (~) mencontohkan cara peraturan pengekodan berubah merentas generasi dan penggunaan standard. RFC 1738 (1994) diperlukan %7E di mana-mana sahaja; RFC 2396 (1998) mengalihkan tilde ke unreserved membenarkan tidak dikodkan. RFC 3986 (2005) mengesahkan status tidak terpelihara. URL lama dengan %7E kekal sah; keluaran pembina baru ~. Evolusi mencerminkan pelajaran penggunaan apabila web matang dan infrastruktur diseragamkan. RFC 1738 adalah konservatif kerana infrastruktur awal adalah heterogen dan pelbagai.
RFC 1738 dikodkan 1994 gelagat pelayar. Penggunaan diseragamkan pada UTF-8; sekatan terbukti tidak perlu. Piawaian kemudian melonggarkan sekatan watak. RFC 3986 membenarkan penyahkodan yang selamat untuk aksara tidak terpelihara.
RFC 1738 (1994): aksara 'tidak selamat' dan peraturan pelarian pertama — perkara yang dianggap berbahaya dan sebabnya
RFC 1738 mentakrifkan aksara "tidak selamat" sebagai aksara yang bercanggah dengan sintaks URI (ruang, slash), digunakan secara sejarah dalam protokol (aksara kawalan), atau sistem tidak dapat menghantar dengan selamat. Senarai konservatif peratus dikodkan jauh lebih daripada yang diperlukan untuk internet moden. Banyak sistem awal mendahului RFC; ia mengkodifikasikan tingkah laku mereka. Watak kawalan adalah benar-benar berbahaya dalam protokol; spaces ialah masalah penghantaran untuk HTTP pelanggan membaca daripada baris arahan. Sistem moden mengendalikan kes ini dengan lebih anggun melalui pengekodan eksplisit.
Ujian terhadap RFC 1738 mendedahkan perkara yang diharapkan oleh sistem lama. Kodkan aksara dari spesifikasi URL 1990-an dan bandingkan dengan RFC 3986 moden. Perbezaan menunjukkan apa yang menjadi santai. Set tidak ditempah dikembangkan dari semasa ke semasa. Tanda sempang, noktah, garis bawah sentiasa selamat. Tilde memerlukan RFC 2396 untuk menjadi selamat. Pendekatan konservatif bermaksud keserasian ke belakang. URL lama yang dibina di bawah peraturan RFC 1738 kekal sah hari ini. Normalisasi dalam bahagian RFC 3986 6 membenarkan penyahkodan tanpa perlu peratusan aksara tidak terpelihara dengan selamat.
RFC 2396 (1998) — reserved versus unreserved, sintaks generik dan tilde dipulihkan
RFC 2396 (1998) memperjelas set aksara dengan lebih teliti daripada RFC 1738. Ia merasmikan aksara tersimpan yang menyajikan struktur URI berbanding tidak terpelihara sebagai data literal. Dikembangkan tanpa rizab termasuk sempang, noktah, garis bawah, tilde. Ia mengakui sintaks URI generik yang berasingan daripada peraturan khusus skema. RFC 2396 memperkenalkan perbezaan antara gen-delims (:, /, ?, #, [, ], @) dan sub-delims (!, $, &, ', (, ), *, +, ,, ;, =). Penamaan menjelaskan watak terpelihara terbahagi kepada dua kumpulan dengan peranan struktur yang berbeza.
RFC 2396 memperkenalkan panduan penormalan yang menyatakan aksara peratusan yang dikodkan boleh menyahkod tanpa perubahan makna. Penyahkodan aksara tidak terpelihara menjadi normal. Tongkat pengekodan aksara terpelihara. RFC 3986 notasi dipermudahkan lagi. Piawaian mengekalkan keserasian ke belakang dengan sengit.
RFC 3986 (2005) — ! * ' ( ) beralih ke sub-delim, gen-delim dinamakan, dan panduan normalisasi tiba
RFC 3986 (2005) ialah standard rujukan moden untuk pengekodan peratus. Ia menyimpan reserved/unreserved perbezaan tetapi memudahkan tatatanda dan menambahkan panduan normalisasi. Tilde bergerak tanpa ragu-ragu. Aksara tidak terpelihara yang dikodkan peratus yang diperjelas standard boleh menyahkod tanpa perubahan makna. RFC 3986 bahagian 3 menerangkan sintaks URI dengan ketepatan. Bahagian 2 mentakrifkan kategori aksara. Bahagian 6 mengkhususkan peraturan formal kepada penormalan sintaksis. Pelaziman berasaskan perbandingan menganggap URI sama jika bentuk ternormal sepadan. Pembuangan segmen titik daripada laluan menjadi normal tanpa perubahan makna.
Penormalan penting untuk analitik, caching, pautan berikut. URL yang berbeza sahaja dalam huruf besar digit heks (RFC 3986 lebih suka huruf besar) hendaklah sama dalam amalan. Menormalkan menghalang entri log pendua dan tersilap cache. Cache yang dikunci pada URL yang dinormalkan menyediakan kandungan tanpa mengira pilihan pengekodan peminta. RFC 3986 panduan normalisasi membolehkan sistem membuat keputusan yang konsisten. Tetapi penguatkuasaan yang ketat merosakkan URL berfungsi dengan baik dalam internet semasa.
Standard WHATWG URL: menghuraikan perkara yang sebenarnya diterima oleh pelayar — set pengekodan, skema khas dan toleransi ralat
WHATWG URL Standard (2016–kini) muncul daripada pengalaman pelayar dengan URL yang tidak mengikuti RFC 3986 dengan sempurna. Pelayar menghadapi ruang yang tidak dikodkan, pengekodan bercampur, kebiasaan. WHATWG menerangkan penghuraian pelayar sebenar, bukan tatabahasa teori. Pelayar dunia sebenar telah membangunkan peraturan praktikal untuk bertolak ansur dengan ruang, mengendalikan aksara yang terlepas, memulihkan daripada input yang salah. RFC 3986 tiba di 2005 dan menentukan tatabahasa formal, tetapi pelayar dalam praktiknya telah menyimpang sedikit.
WHATWG mentakrifkan sembilan set pengekodan dengan peraturan khusus konteks. Ruang dalam laluan menjadi %20; slash dalam maklumat pengguna menjadi %2F. Pelayar menggunakan standard yang lebih sempit untuk web. RFC 3986 menyediakan garis dasar; WHATWG dibina di atasnya.
Contoh berfungsi: satu URL dengan tilde, ruang dan aksara bukan ASCII — cara setiap generasi peraturan mengekodnya
Domain antarabangsa menggunakan pengekodan kod puny (München menjadi xn--mnchen-3ya). Laluan dan pertanyaan masih menggunakan pengekodan peratus. Bahagian domain menggunakan punycode; bahagian laluan dan pertanyaan menggunakan pengekodan peratus. Lapisan tidak bercampur atau mengganggu.
IDNA (Nama Domain Antarabangsa dalam Aplikasi) menyelesaikan masalah nama hos. Punycode mengekod bukan-ASCII kepada ASCII untuk keserasian DNS. Awalan xn-- menandakan pengekodan kod puny. Algoritma adalah deterministik: münchen sentiasa menjadi xn--mnchen-3ya. Aksara bukan ASCII mesti ditukar sebelum peleraian DNS. Pengekodan peratus tidak berfungsi untuk nama hos kerana DNS kekangan dan had label. Setiap pendekatan menyelesaikan masalah yang berbeza dengan betul. Piawaian berkembang secara berasingan atas sebab yang baik.
Perkara ini tidak meliputi — IRI dan nama domain antarabangsa, yang mempunyai sejarah mereka sendiri
Memilih piawaian bergantung pada konteks. Membina URL untuk pelayar? Ikuti RFC 3986; pelayar menggunakan WHATWG. Sistem lama? Pelaksanaan ujian. Memahami evolusi menghalang kekeliruan.
Pembina moden harus mengikuti RFC 3986 atau WHATWG mengikut konteks. URL lama dan baharu wujud bersama memerlukan pemikiran keserasian yang teliti. URL pengekod & penyahkod mengikut RFC 3986 sepanjang, menawarkan rujukan tetap berasingan daripada gelagat pelayar. WHATWG menambah set pengekodan khusus komponen melebihi RFC asas. Mengetahui perkara yang berubah apabila membantu memahami sebab sistem tidak bersetuju. Menguji URL anda dengan kedua-dua piawaian mendedahkan kawalan standard dalam persekitaran anda. Kedua-dua piawaian adalah betul.
Bawa pulang: ketahui buku peraturan yang mana kod anda ikut — cara pengekod & penyahkod URL memberi anda gelagat RFC 3986 sebagai titik rujukan tetap
RFC 3986 normalisasi membenarkan penyahkodan tanpa perlu peratusan dikodkan aksara tidak terpelihara dengan selamat. %41 menormalkan kepada A. Aksara tersimpan yang dikodkan seperti %2F tidak pernah menyahkod; perubahan makna memecahkan struktur. Badan piawai mengekalkan keserasian ke belakang dengan sengit. Pembetulan akan memerlukan penyelarasan seluruh dunia mustahil selepas beberapa dekad. Buku standard tidak memecahkan web secara retroaktif. Mengubah keputusan pengekodan memecahkan berbilion sistem sedia ada secara serentak.
Pengekodan peratusan merangkumi tiga dekad evolusi berhati-hati: dari RFC 1738 melalui RFC 2396 dan RFC 3986 kepada yang moden WHATWG URL Standard. Kod moden harus diikuti RFC 3986 garis dasar. URL lama dengan pengekodan lebih awal kekal sah. Menguji perjalanan pergi balik memastikan ketepatan dan keserasian.