Alat pembangun · URL pengekod & penyahkod
Anatomi URL: skema, kuasa, laluan, pertanyaan dan serpihan dijelaskan
· Latar belakang
url-struktur piawaian web alat pembangun
Setiap keputusan pengekodan peratus bergantung pada bahagian mana dalam URL aksara. Siaran ini menamakan lima komponen daripada RFC 3986, menunjukkan maksud setiap pembatas dan sebab serpihan itu tidak pernah sampai ke pelayan.
Mengapa # yang sama baik di satu tempat dan memusnahkan pautan di tempat lain — soalan komponen, bukan soalan watak
Aksara cincang (#) dalam URL bermaksud perkara yang sama sekali berbeza bergantung pada tempat ia muncul. Di dalam nilai rentetan pertanyaan seperti ?search=C%23sharp, ia mesti dikodkan kepada %23 untuk selamat. Pada penghujung URL seperti https://example.com/page#section, ia menandakan pembatas serpihan dan segala-galanya selepas ia adalah serpihan. Satu watak, dua konteks, dua makna yang berbeza. Inilah sebabnya mengapa keputusan pengekodan bergantung pada mengetahui bahagian mana URL yang anda gunakan.
Tanda tanya (?) juga mempunyai dua sifat. Di dalam laluan atau nilai pertanyaan, ia mesti dikodkan sebagai %3F untuk muncul sebagai data. Sebagai watak literal antara laluan dan rentetan pertanyaan, ia adalah sintaks struktur. Memahami lima komponen ini—skim, autoriti, laluan, pertanyaan dan serpihan—adalah asas pengendalian URL yang betul.
Lima komponen: skema, kuasa, laluan, pertanyaan, serpihan — dan pembatas yang memisahkannya
RFC 3986 secara rasmi mentakrifkan URL sebagai mempunyai lima komponen: skema, kuasa, laluan, pertanyaan dan serpihan, dipisahkan oleh pembatas tertentu. Skim didahulukan, diikuti oleh ://, kemudian pihak berkuasa, kemudian /, kemudian laluan, kemudian ?, kemudian pertanyaan, kemudian #, kemudian serpihan. Tidak semua komponen muncul dalam setiap URL. URL yang minimum mungkin sahaja mempunyai skema dan laluan, seperti "mailto:user@example.com". URL penuh merangkumi kesemua lima.
Setiap komponen mempunyai peraturan sintaksnya sendiri. Titik bertindih dikhaskan dalam skema, slash dalam laluan, ampersand dalam pertanyaan. Aksara tersimpan memerlukan pengekodan apabila ia muncul sebagai data: slash dalam nilai laluan menjadi %2F.
Di dalam pihak berkuasa — info pengguna, hos dan pelabuhan, dan mengapa @ dan : dikhaskan di sana
Komponen kuasa mengandungi alamat rangkaian sumber: nama pengguna, kata laluan, nama hos dan port. Formatnya ialah [userinfo@]host[:port]. Info pengguna dan hos dipisahkan oleh @; hos dan pelabuhan dipisahkan oleh :. Aksara @ dan : ini dikhaskan dalam kuasa untuk mengehadkan subkomponen ini. Jika anda mempunyai nama pengguna yang mengandungi simbol @, ia mesti dikodkan peratus sebelum anda menggabungkannya. Contohnya, "user@email.com:password" sebagai nama pengguna akan menjadi "user%40email.com:password" sebelum @ akhir.
Nama hos boleh menjadi domain berdaftar seperti example.com, alamat IP dalam perpuluhan bertitik seperti 192.0.2.1 atau alamat IPv6 yang dibalut dalam kurungan seperti [::1]. Pelabuhan adalah pilihan; jika ditinggalkan, skema menentukan lalai (80 untuk http, 443 untuk https, dsb.). Bahagian userinfo jarang digunakan dalam URL moden tetapi kekal sebagai sebahagian daripada sintaks.
Segmen laluan dan maksud / — struktur hierarki dan resolusi segmen titik
Laluan ialah jujukan segmen yang dipisahkan oleh garis miring ke hadapan. Laluan /a/b/c mempunyai tiga segmen: a, b dan c. Setiap segmen boleh mengandungi aksara tidak terpelihara, aksara berkod peratus atau aksara terpelihara tertentu yang selamat dalam konteks ini. Garis miring dalam segmen mesti dikodkan sebagai %2F untuk mengelakkan kekeliruan dengan pemisah segmen. Laluan adalah hierarki; ia membayangkan bahawa a ialah lokasi, maka a/b adalah lebih khusus.
Laluan juga menyokong segmen titik khas: satu titik (.) bermaksud "direktori semasa" dan dua titik (..) bermaksud "direktori induk". Laluan seperti ../../etc/passwd diselesaikan ke atas. URL moden dan HTTP elakkan menggunakan ini, tetapi ia wujud dalam sintaks. Segmen laluan yang mengandungi titik literal atau titik dua mesti dikodkan peratus jika makna titik literal tidak dimaksudkan.
Pertanyaan dan serpihan — konvensyen nilai kunci, dan sebab serpihan kekal dalam pelayar
Rentetan pertanyaan mengikut laluan dan bermula dengan ?. Ia secara tradisinya adalah satu siri pasangan kunci=nilai yang dipisahkan oleh &, walaupun sintaks sebenarnya tidak berstruktur—apa-apa sahaja boleh dimasukkan ke dalam pertanyaan. Jika anda mempunyai nilai yang mengandungi & atau =, aksara tersebut mestilah dikodkan peratus supaya ia tidak disalah anggap sebagai pembatas. Pertanyaan dihantar ke pelayan; pelayan memutuskan apa yang perlu dilakukan dengannya.
Serpihan mengikut pertanyaan dan bermula dengan #. Segala-galanya selepas # adalah serpihan, dan ia tidak pernah sampai ke pelayan. Pelayar mengendalikan serpihan secara setempat, biasanya untuk melompat ke sauh bernama atau untuk menunjukkan keadaan dalam aplikasi satu halaman. Oleh kerana serpihan itu tidak pernah sampai ke pelayan, URL dengan serpihan berbeza dianggap menghala ke sumber yang sama.
Contoh yang berjaya: membedah dunia nyata yang panjang URL — melabel setiap komponen dan setiap pembatas
Ambil URL "https://user:pass@example.com:8080/path/to/page?search=hello&sort=date#results". Skimnya ialah https. Pihak berkuasa adalah pengguna:pass@example.com:8080, berpecah kepada info pengguna (pengguna: lulus), hos (example.com) dan pelabuhan (8080). Jalannya ialah /path/to/page, dengan laluan segmen, ke dan halaman. Pertanyaannya ialah search=hello&sort=date, mengandungi dua parameter. Serpihan adalah hasil. Masukkan ini URL ke dalam URL pengekod & penyahkod untuk melihat cara alat melabel dan mengekod setiap komponen.
Jika carian mengandungi &, seperti ?search=R&D, ia menjadi ?search=R%26D apabila dikodkan dengan betul. Aksara yang dikodkan peratusan tidak mencipta sempadan visual dalam teks, jadi pengekodan dan penyahkodan yang berhati-hati adalah sangat penting untuk penghuraian yang betul.
Perkara ini tidak meliputi — resolusi rujukan relatif dan skim khas seperti mailto: dan data:
Rujukan relatif seperti "../page" atau "?query=value" adalah sah di dalam HTML dan ditafsirkan secara relatif kepada dokumen semasa, tetapi ia mempunyai peraturan penyelesaian berasingan mereka sendiri. Skim khas seperti mailto:, data:, dan fail: ikut peraturan yang sama sekali berbeza dan bukan URL mutlak standard.
Catatan ini sahaja memfokuskan pada struktur URL mutlak standard yang ditunjukkan oleh pemeriksa. Rujukan relatif memerlukan asas URL sebelum komponennya boleh ditafsirkan, manakala skema seperti mailto dan data tidak berkongsi bentuk autoriti dan laluan yang sama. Mengekalkan kes tersebut berasingan menghalang peraturan yang dipelajari daripada alamat HTTPS daripada digunakan secara membuta tuli pada sintaks dengan pembatas yang berbeza, langkah penyelesaian atau gelagat pengangkutan.
Bawa pulang: ketahui komponen sebelum anda mengekod — cara pengekod & penyahkod URL nilai tunggal dan mod alamat keseluruhan memetakan struktur ini
Komponen yang anda pengekodkan menentukan aksara yang perlu pelepasan aksara dan yang selamat. Tanda miring ialah sintaks literal dalam laluan, jadi garis miring dalam nilai mestilah %2F. Dalam pertanyaan, & dan = mesti dikodkan jika ia muncul dalam nilai. Pengekod & penyahkod URL mempunyai dua mod: "komponen" untuk pengekodan nilai tunggal dan "alamat keseluruhan" untuk URL yang lengkap. Gunakan mod komponen apabila membina URL dengan menggabungkan bahagian; gunakan mod alamat penuh untuk mengesahkan URL sedia ada.
Mengetahui lima komponen dan pembatasnya membolehkan anda memilih dengan betul setiap kali anda menghadapi tugas pengekodan.