Kyselymerkkijono - Query string

Image
Osoitepalkkiin päällä Google Chrome näyttää URL-osoitteen kanssa kyselymerkkijonon title=Query_string&action=edit.

Kyselymerkkijonon on osa Uniform Resource Locator (URL), joka osoittaa arvot määritettyjä parametreja. Kyselymerkkijono sisältää yleensä kenttiä, jotka Web -selain tai muu asiakassovellus on lisännyt perus -URL -osoitteeseen, esimerkiksi osana HTML -lomaketta.

Web-palvelin voi käsitellä Hypertext Transfer Protocol (HTTP) pyynnöstä joko lukemalla tiedosto sen tiedostojärjestelmä perustuu URL- polku tai hoitamalla pyyntö käyttämällä logiikkaa, joka on nimenomaan tyypin resurssi. Tapauksissa, joissa käytetään erityistä logiikkaa, kyselymerkkijono on kyseisen logiikan käytettävissä sen käsittelyssä käytettäväksi yhdessä URL -osoitteen polkuosan kanssa.

Rakenne

Tyypillinen kyselymerkkijonon sisältävä URL -osoite on seuraava:

https://example.com/over/there?name=ferret

Kun palvelin vastaanottaa tällaisen sivun pyynnön, se voi suorittaa ohjelman ja välittää kyselymerkkijonon, joka tässä tapauksessa on name=ferretmuuttumaton ohjelmalle. Kysymysmerkkiä käytetään erottimena, eikä se ole osa kyselymerkkijonoa.

Verkkokehykset voivat tarjota menetelmiä useiden parametrien jäsentämiseksi kyselymerkkijonossa erottimella erotettuna. Alla olevassa esimerkki -URL -osoitteessa useat kyselyparametrit erotetaan " " -merkillä& :

https://example.com/path/to/page?name=ferret&color=purple

Kyselyjonon tarkkaa rakennetta ei ole standardoitu. Kyselymerkkijonon jäsentämisessä käytetyt menetelmät voivat vaihdella verkkosivustojen välillä.

Verkkosivun linkissä voi olla URL -osoite, joka sisältää kyselymerkkijonon. HTML määrittelee kolme tapaa, joilla käyttäjäagentti voi luoda kyselymerkkijonon:

  • HTML-lomakkeen kautta <form>...</form>elementti
  • palvelin kuvakartan kautta ismapattribuutti <img>elementin, jolla on <img ismap>rakenne
  • indeksoitu haku nyt vanhentuneen <isindex>elementin kautta

Verkkolomakkeet

Yksi alkuperäisistä käyttötarkoituksista oli sisällyttää HTML -lomakkeen sisältö , joka tunnetaan myös nimellä verkkolomake. Erityisesti silloin, kun lomake, joka sisältää kentät field1, field2, field3on esitetty, pitoisuus kentät koodataan Kyselymerkkijonon seuraavasti:

field1=value1&field2=value2&field3=value3...

Vaikka lopullista standardia ei ole, useimmat verkkokehykset sallivat useiden arvojen yhdistämisen yhteen kenttään (esim field1=value1&field1=value2&field2=value3.

Kunkin kentän muotoa, kyselymerkkijonossa sisältää pari . Verkkolomakkeet voivat sisältää kenttiä, jotka eivät ole käyttäjän nähtävissä. nämä kentät sisältyvät kyselymerkkijonoon lomaketta lähetettäessä. field=value

Tämä yleissopimus on W3C: n suositus. W3C suosittelee, että kaikki web-palvelimet tukevat puolipiste erottimet lisäksi ampersand erottimia jotta application / x-www-muotoon urlencoded kyselymerkkijonojen URL-osoitteiden HTML asiakirjoja tarvitsematta entity escape et-merkkejä.

Lomakkeen sisältö koodataan URL -osoitteen kyselymerkkijonoon vain, kun lomakkeen lähetystapa on GET . Samaa koodausta käytetään oletusarvoisesti, kun lähetystapa on POST , mutta tulos lähetetään HTTP -pyyntötekstinä sen sijaan, että se sisällytettäisiin muokattuun URL -osoitteeseen.

Indeksoitu haku

Ennen kuin lomakkeet lisättiin HTML-koodiin, selaimet renderoivat <isindex>elementin yksiriviseksi tekstinsyöttöohjaimeksi. Tähän ohjausobjektiin syötetty teksti lähetettiin palvelimelle kyselymerkkijonon lisäyksenä perus -URL -osoitteen tai muun määritteen määrittämän URL -osoitteen GETaction -pyyntöön. Tämän tarkoituksena oli antaa verkkopalvelimille mahdollisuus käyttää annettua tekstiä kyselykriteereinä, jotta he voivat palauttaa luettelon vastaavista sivuista.

Kun tekstinsyöttö indeksoituun hakusäätimeen lähetetään, se koodataan kyselymerkkijonoksi seuraavasti:

argument1+argument2+argument3...

  • Kyselymerkkijono koostuu argumenttisarjasta jäsentämällä teksti välilyönnin sanoiksi.
  • Sarja erotetaan plusmerkillä ' +'.

Vaikka <isindex>elementti on vanhentunut ja useimmat selaimet eivät enää tue tai renderöi sitä, indeksoitua hakua on edelleen olemassa. Tämä on esimerkiksi lähde plusmerkin erityiselle käsittelylle , ' +' ' ' selaimen URL -osoitteen prosenttikoodauksessa (joka nykyään, indeksoidun haun poistamisen myötä, on vain tarpeeton %20). Myös jotkin CGI: tä tukevat verkkopalvelimet (esim. Apache ) käsittelevät kyselymerkkijonon komentoriviargumenteiksi, jos se ei sisällä yhtäläisyysmerkkiä ' =' (CGI 1.1: n kohdan 4.4 mukaisesti). Jotkin CGI -komentosarjat riippuvat edelleen ja käyttävät tätä historiallista käyttäytymistä HTML: ään upotetuissa URL -osoitteissa.

URL -koodaus

Jotkut merkit eivät voi olla osa URL-osoite (esimerkiksi, tila) ja joitakin muita merkkejä on erityinen merkitys URL: esimerkiksi merkki #voidaan edelleen määrittää momentin (tai fragmentti ) asiakirjan. HTML -lomakkeissa merkkiä =käytetään nimen erottamiseen arvosta. Yleinen URI -syntaksi käyttää URL -koodausta tämän ongelman ratkaisemiseen, kun taas HTML -lomakkeet tekevät joitain lisäkorvauksia sen sijaan, että käyttäisivät prosenttikoodausta kaikille tällaisille merkeille. SPACE on koodattu " +" tai " %20".

HTML 5 määrittää seuraavan muunnoksen HTML -lomakkeiden lähettämiseksi "GET" -menetelmällä verkkopalvelimelle. Seuraavassa on lyhyt yhteenveto algoritmista:

  • Merkit, joita ei voi muuntaa oikeaan merkistöön, korvataan numeerisilla HTML -merkkiviittauksilla
  • SPACE on koodattu ' +' tai ' %20'
  • Letters ( A- Zja a- z), numerot ( 0- 9) ja kirjaimilla ' ~', ' -'' .'ja' _' on jätetty-on
  • + on koodattu %2B
  • Kaikki muut merkit on koodattu %HH heksadesimaalisena esityksenä kaikkien muiden kuin ASCII-merkkien kanssa, jotka on ensin koodattu UTF-8-muotoon (tai muuhun määritettyyn koodaukseen)

~Tildea (" ") vastaava oktetti on sallittu RFC3986-kyselymerkkijonoissa, mutta se on koodattava prosentteina HTML-lomakkeisiin " %7E".

SPACE: n koodaus ' +' ja "sellaisten " -merkkien valinta erottaa tämän koodauksen RFC 3986: sta.

Esimerkki

Jos lomake on upotettu HTML -sivulle seuraavasti:

<form action="/cgi-bin/test.cgi" method="get">
  <input type="text" name="first" />
  <input type="text" name="second" />
  <input type="submit" />
</form>

ja käyttäjä lisää merkkijonot "tämä on kenttä" ja "oliko se selvä (jo)?" kahden kenttiin ja painaa lähetä-painiketta, ohjelman test.cgi(ohjelman määrittämän action attribuutin , että form elementin yllä olevassa esimerkissä) saavat seuraavan kyselyn merkkijono: first=this+is+a+field&second=was+it+clear+%28already%29%3F.

Jos lomake prosessoidaan on palvelimella , jonka CGI -skripti , käsikirjoitus voi tyypillisesti vastaanottaa kyselymerkkijonossa kuin ympäristömuuttujalla nimeltä QUERY_STRING.

Seuranta

Ohjelma, joka vastaanottaa kyselymerkkijonon, voi jättää osan tai kokonaan huomiotta. Jos pyydetty URL -osoite vastaa tiedostoa eikä ohjelmaa, koko kyselyjono jätetään huomiotta. Riippumatta siitä, käytetäänkö kyselymerkkijonoa vai ei, koko URL -osoite, mukaan lukien se, tallennetaan palvelimen lokitiedostoihin .

Nämä tosiasiat mahdollistavat kyselymerkkijonojen käytön käyttäjien seuraamiseen samalla tavalla kuin HTTP -evästeet . Jotta tämä toimisi, joka kerta, kun käyttäjä lataa sivun, yksilöllinen tunniste on valittava ja lisättävä kyselymerkkijonoksi kaikkien sivun sisältämien linkkien URL -osoitteisiin. Heti kun käyttäjä seuraa yhtä näistä linkeistä, palvelimelta pyydetään vastaavaa URL -osoitetta. Tällä tavalla tämän sivun lataus linkitetään edelliseen.

Jos esimerkiksi pyydetään verkkosivua, joka sisältää seuraavat:

 <a href="foo.html">see my page!</a>
 <a href="bar.html">mine is better</a>

yksilöllinen merkkijono, kuten e0a72cb2a2c7on valittu, ja sivua muokataan seuraavasti:

 <a href="foo.html?e0a72cb2a2c7">see my page!</a>
 <a href="bar.html?e0a72cb2a2c7">mine is better</a>

Kyselymerkkijonon lisääminen ei muuta tapaa, jolla sivu näytetään käyttäjälle. Kun käyttäjä seuraa esimerkiksi ensimmäistä linkkiä, selain pyytää sivua foo.html?e0a72cb2a2c7palvelimelle, joka jättää sen huomiotta ?ja lähettää sivun foo.htmlodotetusti lisäämällä kyselymerkkijonon myös linkkeihinsä.

Tällä tavalla tämän käyttäjän myöhemmät sivupyynnöt sisältävät saman kyselymerkkijonon e0a72cb2a2c7, jolloin voidaan todeta, että sama käyttäjä on tarkastellut kaikkia näitä sivuja. Kyselymerkkijonoja käytetään usein verkkojäljitteiden yhteydessä .

Suurimmat erot seurantaan käytettyjen kyselymerkkijonojen ja HTTP -evästeiden välillä ovat seuraavat:

  1. Kyselymerkkijonot ovat osa URL -osoitetta, ja ne sisältyvät siksi, jos käyttäjä tallentaa tai lähettää URL -osoitteen toiselle käyttäjälle. evästeitä voidaan säilyttää koko selausistunnon ajan, mutta niitä ei tallenneta tai lähetetä URL -osoitteen mukana.
  2. Jos käyttäjä saapuu samalle verkkopalvelimelle kahdella (tai useammalla) itsenäisellä polulla, hänelle annetaan kaksi eri kyselymerkkijonoa, kun taas tallennetut evästeet ovat samat.
  3. Käyttäjä voi poistaa evästeet käytöstä, jolloin evästeiden käyttäminen seurantaan ei toimi. Kyselymerkkijonojen käytön seurannan pitäisi kuitenkin toimia kaikissa tilanteissa.
  4. Sivun eri vierailujen välittämät eri kyselymerkkijonot tarkoittavat, että sivuja ei koskaan näytetä selaimen (tai välityspalvelimen, jos sellainen on) välimuistista, mikä lisää verkkopalvelimen kuormitusta ja hidastaa käyttökokemusta.

yhteensopivuus kysymyksiä

Mukaan HTTP- erittely:

Käytännössä havaitaan erilaisia ​​ad hoc -rajoituksia pyyntölinjan pituudelle. On SUOSITELTAVAA, että kaikki HTTP-lähettäjät ja -vastaanottajat tukevat vähintään pyyntörivin pituutta 8000 oktettia.

Jos URL-osoite on liian pitkä, verkkopalvelin epäonnistuu käyttämällä 414 Request-URI Too Long HTTP -tilakoodia.

Yleinen ratkaisu näihin ongelmiin on käyttää POST -protokollaa GET: n sijasta ja tallentaa parametrit pyyntökappaleeseen. Pyyntötekstien pituusrajoitukset ovat tyypillisesti paljon korkeammat kuin URL -osoitteiden pituudet. Esimerkiksi POST -koon raja on oletuksena 2 Mt IIS 4.0: ssa ja 128 kt IIS 5.0: ssa. Raja on määritettävissä Apache2: ssa käyttämällä LimitRequestBodydirektiiviä, joka määrittää pyyntökappaleessa sallittujen tavujen lukumäärän 0 (eli rajoittamaton) - 2147483647 (2 Gt).

Katso myös

Viitteet