Apa perbedaan antara parameter URL dan string kueri?

91

Saya tidak melihat banyak perbedaan antara parameter dan string kueri, di URL. Jadi apa bedanya dan kapan harus digunakan di atas yang lain?

Konst
sumber
1
Apakah Anda memiliki konteks, karena sejauh yang saya tahu keduanya umumnya digunakan untuk hal yang sama - tetapi kasus Anda mungkin spesifik konteks.
Allan S. Hansen
Saya tidak memiliki konteks khusus, ini pertanyaan umum. Dalam hal apa saya harus menggunakan satu cara, bukan yang lain. Harus ada kegunaan yang berbeda dari keduanya.
Konst
Secara pribadi - Saya kebanyakan menggunakan parameter kata saat membahasnya dalam konteks panggilan variabel atau metode, dan string kueri saat membicarakannya dalam konteks URL. (misalnya: string kueri dibagi menjadi parameter untuk metode). Tapi itu hanya bahasa jadi konteks dan situasinya berbeda dan saya ragu ada orang yang akan memburu Anda untuk menggunakan salah satunya ketika Anda "merasa" menyukainya :).
Allan S. Hansen

Jawaban:

84

The komponen query ditunjukkan oleh pertama ?di URI. "Query string" mungkin sinonim (istilah ini tidak digunakan dalam standar URI).

Beberapa contoh untuk HTTP URI dengan komponen kueri:

http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b

( daftar karakter yang diizinkan dalam komponen kueri )

"Format" komponen kueri tergantung pada pembuat URI. Konvensi umum ( tetapi tidak lebih dari konvensi, sejauh menyangkut standar URI ¹) adalah menggunakan komponen kueri untuk pasangan nilai kunci, alias. parameter , seperti dalam contoh terakhir di atas: bar1=a&bar2=b.

Parameter tersebut juga dapat muncul di komponen URI lainnya, yaitu jalur² dan fragmen. Sejauh menyangkut standar URI, terserah Anda komponen dan format mana yang akan digunakan.

Contoh URI dengan parameter di jalur, kueri, dan fragmen:

http://example.com/foo;key1=value1?key2=value2#key3=value3

¹ Standar URI menjelaskan tentang komponen query :

[…] Komponen kueri sering digunakan untuk membawa informasi pengenal dalam bentuk pasangan "key = value" […]

² Standar URI menjelaskan tentang komponen jalur :

[…] Tanda titik koma (";") dan sama dengan ("=") sering digunakan untuk membatasi parameter dan nilai parameter yang berlaku untuk segmen tersebut. Karakter khusus koma (",") sering digunakan untuk tujuan serupa.

unor
sumber
1
Parameter dan kueri berbeda. Lihat bagian 3.3 dan 3.4 di tools.ietf.org/html/rfc2396.html
cowlinator
@cowlinator: (RFC 2396 sudah usang, tetapi standar saat ini, RFC 3986, mengatakan sesuatu yang serupa tentang parameter di komponen jalur ). Saya tidak menyatakan bahwa mereka sama, atau apakah saya? Penulis URI dapat menentukan parameter dalam komponen kueri (seperti yang dijelaskan dalam jawaban saya), dan mereka juga dapat menentukan parameter dalam komponen jalur (seperti yang dijelaskan dalam referensi Anda) - dalam kedua kasus itu hanya konvensi, tidak ada yang didefinisikan standar. - Apakah Anda menyarankan perubahan pada jawaban saya? Apakah menurut Anda OP berarti parameter di jalur?
unor
30

Parameter adalah pasangan nilai kunci yang dapat muncul di dalam jalur URL, dan dimulai dengan karakter titik koma ( ;).

String kueri muncul setelah jalur (jika ada) dan dimulai dengan karakter tanda tanya ( ?).

Baik parameter dan string kueri berisi pasangan nilai kunci.

Dalam GETpermintaan, parameter muncul di URL itu sendiri:

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

Dalam POSTpermintaan, parameter dapat muncul di URL itu sendiri, tetapi juga di aliran data (dikenal sebagai konten).

String kueri selalu menjadi bagian dari URL.

Parameter dapat dikubur dalam form-dataaliran data saat menggunakan metode POST sehingga mereka mungkin tidak muncul di URL. Ya, POSTpermintaan dapat menentukan parameter sebagai data formulir dan di URL, dan ini tidak tidak konsisten karena parameter dapat memiliki beberapa nilai.

Sejauh ini saya tidak menemukan penjelasan untuk perilaku ini. Saya rasa terkadang berguna untuk "menampilkan" parameter dari POSTpermintaan, atau bahkan membiarkan kode yang menangani GETpermintaan berbagi beberapa bagian dengan penanganan kode a POST. Tentu saja ini hanya dapat berfungsi dengan parameter pendukung kode server di URL.

Sampai Anda mendapatkan wawasan yang lebih baik, saya sarankan Anda untuk menggunakan parameter hanya dalam form-dataaliran data POSTpermintaan.

Sumber:

Yang Harus Diketahui Setiap Pengembang Tentang URL

RFC 3986

Laurent Caillette
sumber