Bahasa Indonesia

Alat pengembang · URL encoder & decoder

Anatomi URL: penjelasan skema, otoritas, jalur, kueri, dan fragmen

· Latar belakang

struktur url standar web alat pengembang

Lima komponen URL diberi label pembatasnya
Ilustrasi vektor ToolAcre asli

Setiap keputusan pengkodean persen bergantung pada bagian mana dari URL sebuah karakter berada. Postingan ini menyebutkan lima komponen dari RFC 3986, menunjukkan arti setiap pembatas dan mengapa fragmen tidak pernah mencapai server.

Mengapa # yang sama baik-baik saja di satu tempat dan merusak tautan di tempat lain — pertanyaan komponen, bukan pertanyaan karakter

Karakter hash (#) dalam URL memiliki arti yang sangat berbeda tergantung di mana karakter tersebut muncul. Di dalam nilai string kueri seperti ?search=C%23sharp, nilai tersebut harus dikodekan ke %23 agar aman. Di akhir URL seperti https://example.com/page#section, itu menandai pembatas fragmen dan segala sesuatu setelahnya adalah sebuah fragmen. Satu karakter, dua konteks, dua makna berbeda. Inilah sebabnya mengapa keputusan pengkodean bergantung pada mengetahui bagian mana dari URL yang sedang Anda gunakan.

Tanda tanya (?) juga bersifat ganda. Di dalam jalur atau nilai kueri, nilai tersebut harus dikodekan sebagai %3F agar muncul sebagai data. Sebagai karakter literal antara jalur dan string kueri, ini adalah sintaksis struktural. Memahami kelima komponen ini—skema, otoritas, jalur, kueri, dan fragmen—adalah dasar penanganan URL yang benar.

Lima komponen: skema, otoritas, jalur, kueri, fragmen — dan pembatas yang memisahkannya

RFC 3986 secara formal mendefinisikan URL memiliki lima komponen: skema, otoritas, jalur, kueri, dan fragmen, dipisahkan oleh pembatas tertentu. Skema didahulukan, diikuti oleh ://, lalu otoritas, lalu /, lalu jalurnya, lalu ?, lalu kuerinya, lalu #, lalu fragmennya. Tidak semua komponen muncul di setiap URL. URL minimal mungkin hanya memiliki skema dan jalur, seperti "mailto:user@example.com". URL lengkap mencakup kelimanya.

Setiap komponen memiliki aturan sintaksisnya sendiri. Titik dua dicadangkan dalam skema, garis miring di jalur, ampersand dalam kueri. Karakter yang dicadangkan perlu dikodekan saat muncul sebagai data: garis miring pada nilai jalur menjadi %2F.

Di dalam otoritas — info pengguna, host dan port, serta alasan @ dan : dicadangkan di sana

Komponen otoritas berisi alamat jaringan sumber daya: nama pengguna, kata sandi, nama host, dan port. Formatnya adalah [userinfo@]host[:port]. Info pengguna dan host dipisahkan oleh @; host dan port dipisahkan oleh :. Karakter @ dan : ini dicadangkan dalam wewenang untuk membatasi subkomponen ini. Jika Anda memiliki nama pengguna yang mengandung simbol @, nama pengguna tersebut harus dikodekan dalam persen sebelum Anda menggabungkannya. Misalnya, "user@email.com:kata sandi" sebagai nama pengguna akan menjadi "user%40email.com:kata sandi" sebelum @ terakhir.

Nama host dapat berupa domain terdaftar seperti example.com, alamat IP dalam desimal bertitik seperti 192.0.2.1, atau alamat IPv6 yang diapit tanda kurung seperti [::1]. Port ini opsional; jika dihilangkan, skema menentukan default (80 untuk http, 443 untuk https, dll.). Bagian info pengguna jarang digunakan dalam URL modern tetapi tetap menjadi bagian dari sintaksis.

Segmen jalur dan arti / — struktur hierarki dan resolusi segmen titik

Jalur adalah jaringan segmen yang dipisahkan oleh garis miring ke depan. Jalur /a/b/c memiliki tiga segmen: a, b dan c. Setiap segmen dapat berisi karakter yang tidak dicadangkan, karakter dengan kode persen, atau karakter khusus tertentu yang aman dalam konteks ini. Garis miring dalam segmen harus dikodekan sebagai %2F untuk menghindari kebingungan dengan pemisah segmen. Jalannya bersifat hierarkis; ini menyiratkan bahwa a adalah lokasi, maka a/b lebih spesifik.

Jalur juga mendukung segmen titik khusus: satu titik (.) berarti "direktori saat ini" dan dua titik (..) berarti "direktori induk". Jalur seperti ../../etc/passwd mengarah ke atas. URL modern dan HTTP menghindari penggunaan ini, tetapi mereka ada dalam sintaksisnya. Segmen jalur yang berisi titik literal atau titik ganda harus dikodekan dalam persen jika arti titik literal tidak dimaksudkan.

Kueri dan fragmen — konvensi nilai kunci, dan alasan fragmen tetap berada di browser

String kueri mengikuti jalur dan dimulai dengan?. Secara tradisional ini merupakan serangkaian pasangan kunci=nilai yang dipisahkan oleh &, meskipun sintaksisnya sebenarnya tidak terstruktur—apa pun bisa dimasukkan ke dalam kueri. Jika Anda memiliki nilai yang mengandung & atau =, karakter tersebut harus dikodekan dalam persen agar tidak disalahartikan sebagai pembatas. Permintaan dikirim ke server; server memutuskan apa yang harus dilakukan dengannya.

Fragmen mengikuti kueri dan dimulai dengan #. Segala sesuatu setelah # adalah sebuah fragmen, dan tidak pernah mencapai server. Browser menangani fragmen secara lokal, biasanya untuk melompat ke jangkar bernama atau untuk menunjukkan status dalam aplikasi satu halaman. Karena fragmen tidak pernah mencapai server, URL dengan fragmen berbeda dianggap menunjuk ke sumber daya yang sama.

Contoh praktis: membedah URL dunia nyata yang panjang — memberi label pada setiap komponen dan setiap pembatas

Ambil URL "https://user:pass@example.com:8080/path/to/page?search=hello&sort=date#results". Skemanya adalah https. Otoritasnya adalah pengguna:pass@example.com:8080, dibagi menjadi info pengguna (pengguna:pass), host (example.com) dan port (8080). Jalurnya adalah /path/to/page, dengan jalur segmen, ke dan halaman. Kuerinya adalah search=hello&sort=date, berisi dua parameter. Fragmen tersebut adalah hasil. Masukkan URL ini ke dalam encoder & decoder URL untuk melihat bagaimana alat memberi label dan mengkodekan setiap komponen.

Jika pencarian berisi &, seperti ?search=R&D, itu menjadi ?search=R%26D ketika dikodekan dengan benar. Karakter yang dikodekan dengan persen tidak membuat batasan visual dalam teks, jadi pengkodean dan penguraian kode yang cermat sangat penting untuk penguraian yang benar.

Apa yang tidak tercakup di sini — resolusi referensi relatif dan skema khusus seperti mailto: dan data:

Referensi relatif seperti "../page" atau "?query=value" valid di dalam HTML dan diinterpretasikan relatif terhadap dokumen saat ini, namun memiliki aturan resolusi tersendiri. Skema khusus seperti mailto:, data:, dan file: mengikuti aturan yang sangat berbeda dan bukan merupakan URL absolut standar.

Posting ini hanya berfokus pada struktur URL absolut standar yang ditunjukkan oleh inspektur. Referensi relatif memerlukan basis URL sebelum komponennya dapat diinterpretasikan, sedangkan skema seperti mailto dan data tidak memiliki bentuk otoritas dan jalur yang sama. Memisahkan kasus-kasus tersebut akan mencegah aturan yang dipelajari dari alamat HTTPS diterapkan secara membabi buta ke sintaksis dengan pembatas, langkah penyelesaian, atau perilaku pengangkutan yang berbeda.

Kesimpulan: ketahui komponennya sebelum Anda melakukan enkode — bagaimana mode nilai tunggal dan seluruh alamat encoder & decoder URL dipetakan ke dalam struktur ini

Komponen yang Anda enkode menentukan karakter mana yang perlu di-escape dan mana yang aman. Garis miring adalah sintaks literal pada jalur, jadi garis miring pada suatu nilai harus %2F. Dalam kueri, & dan = harus dikodekan jika muncul dalam nilai. Encoder & decoder URL memiliki dua mode: "komponen" untuk mengkodekan satu nilai, dan "seluruh alamat" untuk URL lengkap. Gunakan mode komponen saat membuat URL dengan menggabungkan bagian-bagian; gunakan mode seluruh alamat untuk memverifikasi URL yang ada.

Mengetahui lima komponen dan pembatasnya memungkinkan Anda memilih dengan benar setiap kali Anda menghadapi tugas pengkodean.