Apakah parameter permintaan url valid jika tidak memiliki nilai?

138

Apakah url seperti http://example.com/foo?barvalid?

Saya mencari tautan ke sesuatu yang resmi yang mengatakan satu atau lain cara. Jawaban ya / tidak sederhana atau bukti anekdotal tidak akan memotongnya.

Conley Owens
sumber
3
Selain URI RFC saya ingin menunjukkan contoh dunia nyata ini. Drupal menggunakan parameter kueri berharga ini di beberapa tautan sebagai bentuk penghentian cache. mis. www.google-analytics.com/analytics.js?o490ub atau /themes/seven/ie.css?o4eppb. Anda mungkin sudah mengetahui hal ini tetapi beberapa orang mungkin tidak tahu.
Elijah Lynn

Jawaban:

103
  • Berlaku untuk URI RFC
  • Kemungkinan dapat diterima oleh kerangka / kode sisi server Anda

The URI RFC tidak mandat format untuk string. Meskipun diakui bahwa string kueri akan sering membawa pasangan nama-nilai, string tersebut tidak diharuskan (misalnya akan sering berisi URI lain).

3.4. Pertanyaan

Komponen kueri berisi data non-hierarkis yang, bersama dengan data dalam komponen jalur (Bagian 3.3), berfungsi untuk mengidentifikasi sumber daya dalam lingkup skema URI dan otoritas penamaan (jika ada). ...

... Namun, karena komponen kueri sering digunakan untuk membawa informasi pengidentifikasian dalam bentuk pasangan "key = value" dan satu nilai yang sering digunakan adalah referensi ke URI lain, ...

HTML menetapkan bahwa formulir yang dikirimkan melalui HTTP GET harus menyandikan nilai formulir sebagai pasangan nama-nilai dalam formulir "? Key1 = value1 & key2 = value2 ..." (disandikan dengan benar). Parsing string kueri hingga ke kode sisi server (mis. Mesin Java servlet).

Anda tidak mengidentifikasi kerangka sisi server apa yang Anda gunakan, jika ada, tetapi ada kemungkinan bahwa kerangka sisi server Anda dapat menganggap string kueri akan selalu berada dalam pasangan nilai-nama dan mungkin tersedak pada string kueri yang tidak dalam format itu (mis ?bar.). Jika kode kustom Anda sendiri menguraikan string kueri, Anda hanya perlu memastikan Anda menangani format string kueri itu. Jika ini kerangka kerja, Anda harus berkonsultasi dengan dokumentasi Anda atau cukup mengujinya untuk melihat bagaimana penanganannya.

Bert F
sumber
7
ASP.NET MVC (versi 4 dan 5 sepengetahuan saya) pasti tercekik ketika tidak ada nilai yang diberikan :(
AR
2
The isindexmagic namedari HTML5 memungkinkan mengirimkan query string tanpa kunci-nilai Format stackoverflow.com/a/37579004/895245
Ciro Santilli郝海东冠状病六四事件法轮功
@CiroSantilli 烏坎 事件 2016 六四 事件 法轮功 sebagai fitur usang untuk dukungan lawas HTML3
Evan Carroll
80

Mereka benar-benar valid. Anda bisa menganggap mereka setara dengan pria berotot besar yang berdiri diam di belakang pembawa pesan massa. Pria itu tidak memiliki nama dan tidak berbicara, tetapi kehadirannya hanya menyampaikan informasi.

Marc B
sumber
19
Pria berotot mafia itu memiliki nama, Anda hanya tidak tahu itu. Anda tahu itu di param dan pada dasarnya membawa nilai boolean (sekarang, tidak ada).
Vlasec
2
Cara terbaik untuk menggambarkannya :)
Mohammad Kermani
1
Nama orang besar itu adalah Cheich , dari episode pencurian kasino di Star Trek: Deep Space 9.
Anthony Rutledge
8

"Skema" http "digunakan untuk menemukan sumber daya jaringan melalui protokol HTTP. Bagian ini mendefinisikan sintaks dan semantik khusus skema untuk URL http." http://www.w3.org/Protocols/rfc2616/rfc2616.html

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] 

Jadi ya, semuanya valid setelah tanda tanya. Server Anda mungkin menafsirkan secara berbeda, tetapi secara anekdot , Anda dapat melihat beberapa bahasa memperlakukannya sebagai nilai boolean yang benar jika terdaftar.

Jeff Ferland
sumber
6
Untuk definisi formal, lihat RFC 2396 ( ietf.org/rfc/rfc2396.txt ), yang tidak membahas konten string kueri, selain menentukan kumpulan karakter legal, dan karakter yang memiliki arti khusus. Secara khusus, ia mengatakan bahwa "komponen permintaan adalah serangkaian informasi yang akan ditafsirkan oleh sumber daya," menyiratkan bahwa definisi tersebut tergantung pada protokol, dan dengan demikian kunci = nilai sebagian besar oleh konvensi.
RobertB
6

Ya itu benar.

Jika seseorang hanya ingin memeriksa apakah parameternya ada atau tidak, ini adalah salah satu cara untuk melakukannya.

Oded
sumber
4

Spesifikasi URI

Satu-satunya bagian yang relevan dari spesifikasi URI adalah untuk mengetahui segala sesuatu antara yang pertama ?dan yang pertama #sesuai dengan definisi permintaan. Itu dapat menyertakan karakter seperti [:/.?]. Ini berarti bahwa string kueri seperti ?bar, atau ?ten+green+applesvalid.

Temukan RFC 3986 di sini

Spesifikasi HTML

isindex tidak berarti HTML5.

Ini disediakan usang untuk digunakan sebagai elemen pertama dalam bentuk saja, dan mengirimkan tanpa nama.

Jika nama entri adalah "isindex", jenisnya adalah "teks", dan ini adalah entri pertama dalam kumpulan data formulir, lalu tambahkan nilai untuk hasil dan lewati sisa dari subteps untuk entri ini, pindah ke yang berikutnya entri, jika ada, atau langkah selanjutnya dalam keseluruhan algoritma sebaliknya.

Bendera isindex hanya untuk penggunaan sebelumnya. Formulir sesuai dokumen HTML tidak akan menghasilkan muatan yang perlu diterjemahkan dengan set bendera ini.

Isindex terakhir kali didukung adalah HTML3 . Ini digunakan dalam HTML5 adalah untuk memberikan kompatibilitas mundur lebih mudah.

Dukungan di perpustakaan

Dukungan di perpustakaan untuk format URI ini bervariasi namun beberapa perpustakaan memang menyediakan dukungan warisan untuk memudahkan penggunaan isindex.

Perl URI.pm (dukungan khusus)

Beberapa perpustakaan seperti Perl URI menyediakan metode parsing struktur semacam ini

$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.

Node.js url(tidak ada dukungan khusus)

Sebagai contoh lain yang jauh lebih sering, node.jsmengambil rute normal dan memudahkan penguraian juga

  • Sebuah benang
  • atau, objek kunci dan nilai (menggunakan parseQueryString)

Sebagian besar parsing URI API lainnya mengikuti sesuatu yang mirip dengan ini.

Evan Carroll
sumber
3

isindex sihir usang name dari HTML5

Fitur usang ini memungkinkan pengiriman formulir untuk menghasilkan URL seperti itu, memberikan bukti lebih lanjut bahwa itu valid untuk HTML. Misalnya:

<form action="#isindex" class="border" id="isindex" method="get">
  <input type="text" name="isindex" value="bar"/>
  <button type="submit">Submit</button>
</form>

menghasilkan URL jenis:

?bar

Standar: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute

isindexNamun sudah usang seperti yang disebutkan di: https://stackoverflow.com/a/41689431/895245

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
1

Seperti semua jawaban lain yang dijelaskan, ini sangat valid untuk memeriksa, khususnya untuk hal-hal baik boolean

Berikut adalah fungsi sederhana untuk mendapatkan string kueri berdasarkan nama:

function getParameterByName(name, url) {
    if (!url) {
        url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

dan sekarang Anda ingin memeriksa apakah string kueri yang Anda cari ada atau tidak, Anda dapat melakukan hal sederhana seperti:

var exampleQueryString = (getParameterByName('exampleQueryString') != null);

yang exampleQueryStringakan falsejika fungsi tidak dapat menemukan string, jika tidak akan true.

Mohammad Kermani
sumber