HTTP LÄHETTÄÄ pyytää toimittamaan lisätietoja asiakkaalta (selaimelta) viestin rungon palvelimelle. Verrattuna, SAADA pyynnöt sisältävät kaikki vaadittavat tiedot URL-osoitteessa. HTML-lomakkeissa voidaan käyttää kumpaakin menetelmää määrittämällä Menetelmä = "post" tai Menetelmä = "GET" (oletus) elementti. Määritetty menetelmä määrittää, kuinka lomaketiedot lähetetään palvelimelle. Kun menetelmä on GET, kaikki lomaketiedot koodataan URL-osoitteeseen, joka lisätään toiminta URL kyselymerkkijonoparametreina. POST-muodossa lomaketiedot näkyvät HTTP-pyynnön viestin rungossa.
SAADA | LÄHETTÄÄ | |
---|---|---|
Historia | Parametrit pysyvät selaimen historiassa, koska ne ovat osa URL-osoitetta | Parametreja ei tallenneta selaimen historiaan. |
Muistio | Voidaan merkitä kirjanmerkkeihin. | Ei voida merkitä kirjanmerkkeihin. |
BACK-painike / lähetä toiminta uudelleen | GET-pyynnöt suoritetaan uudelleen, mutta niitä ei voida lähettää uudelleen palvelimelle, jos HTML on tallennettu selaimen välimuistiin. | Selain yleensä ilmoittaa käyttäjälle, että tiedot on toimitettava uudelleen. |
Koodaustyyppi (enctype-attribuutti) | application / x-www-lomakkeella-urlencoded | multipart / form-data tai application / x-www-form-urlencoded Käytä moniosaista koodausta binaariseen dataan. |
parametrit | voi lähettää, mutta parametritiedot ovat rajoitettu siihen, mitä voimme täyttää pyyntöriville (URL). Turvallisin käyttää alle 2 kt parametreja, jotkut palvelimet käsittelevät jopa 64 kt | Voi lähettää parametrejä, tiedostojen lähettäminen mukaan lukien, palvelimelle. |
hakkeroitu | Helvempi hakkerointi käsikirjoittajille | Vaikeampi hakata |
Rajoitukset lomaketietotyypille | Kyllä, vain ASCII-merkit ovat sallittuja. | Ei rajoituksia. Binaaritiedot ovat myös sallittuja. |
turvallisuus | GET on vähemmän turvallinen verrattuna POSTiin, koska lähetetyt tiedot ovat osa URL-osoitetta. Joten se tallennetaan selaimen historiaan ja palvelinlokeihin selvätekstinä. | POST on vähän turvallisempi kuin GET, koska parametreja ei tallenneta selaimen historiaan tai Web-palvelimen lokiin. |
Rajoitukset lomaketiedon pituuteen | Kyllä, koska lomaketiedot ovat URL-osoitteessa ja URL-osoitteiden pituutta on rajoitettu. Turvallisen URL-osoitteen pituusrajoitus on usein 2048 merkkiä, mutta vaihtelee selaimen ja Web-palvelimen mukaan. | Ei rajoituksia |
Käytettävyys | GET-menetelmää ei tule käyttää salasanojen tai muun arkaluontoisen tiedon lähettämisessä. | POST-menetelmä, jota käytetään salasanojen tai muun arkaluontoisen tiedon lähettämisessä. |
näkyvyys | GET-menetelmä on kaikkien nähtävissä (se näkyy selaimen osoiterivillä), ja sillä on rajoitettu lähetettävien tietojen määrä. | POST-menetelmän muuttujia ei näytetä URL-osoitteessa. |
välimuistissa | Voidaan tallentaa välimuistiin | Ei välimuistissa |
Perusteellinen ero Method = "GET" ja Method = "POST" on se, että ne vastaavat erilaiset HTTP-pyynnöt, kuten määritelty HTTP-eritelmissä. Molempien menetelmien lähetysprosessi alkaa samalla tavalla - selain rakentaa lomaketietoryhmän ja koodaa sitten sen määrittelemällä tavalla. enctype määrite. varten Method = "POST enctype ominaisuus voi olla multipart / form-data tai application / x-www-lomakkeella-urlencoded, kun taas Method = "GET", vain application / x-www-lomakkeella-urlencoded on sallittu. Tämä lomaketiedosto siirretään sitten palvelimelle.
Lomakkeen lähettämistä varten menetelmällä METHOD = "GET" selain rakentaa URL-osoitteen ottamalla arvo toiminta attribuutti, liittämällä a ? lisäämällä siihen lomaketietosarjan (koodattu käyttämällä sovellusta / x-www-muoto-urlenkoodattua sisältötyyppiä). Tämän jälkeen selain käsittelee tätä URL-osoitetta seuraten linkkiä (tai kuin jos käyttäjä olisi kirjoittanut URL-osoitteen suoraan). Selain jakaa URL-osoitteen osiin ja tunnistaa isäntän, lähettää sitten tälle isäntälle GET-pyynnön loput URL-osoitteen perusteena. Palvelin vie sen sieltä. Huomaa, että tämä prosessi tarkoittaa, että lomaketiedot on rajoitettu ASCII-koodeihin. Erityistä varovaisuutta tulee koodata ja dekoodata muun tyyppisiä merkkejä siirrettäessä niitä URL-osoitteen kautta ASCII-muodossa.
Lomakkeen toimittaminen METHOD = "POST" aiheuttaa POST-pyynnön lähettämisen käyttämällä toiminta - määritteen ja viestin, joka on luotu enctype ominaisuus.
Koska lomaketiedot lähetetään osana URL-osoitetta, kun SAADA käytetään --
Lähetettyjen lomaketietojen käsittely riippuu periaatteessa siitä, lähetetäänkö ne Method = "GET" tai Method = "POST". Koska dataa koodataan eri tavoin, tarvitaan erilaisia dekoodausmekanismeja. Siten METHODin muuttaminen voi yleensä vaatia muutosta komentosarjasta, joka käsittelee lähettämistä. Esimerkiksi käytettäessä CGI-liittymää skripti vastaanottaa tiedot ympäristömuuttujassa (QUERYSTRING), kun SAADA käytetään. Mutta kun LÄHETTÄÄ käytetään, lomaketiedot siirretään vakiosyöttövirrassa (stdin) ja luettavien tavujen lukumäärä annetaan Sisältöpituus-otsikossa.
GET-suositusta suositellaan toimitettaessa "idempotentteja" lomakkeita - sellaisia, jotka eivät "muuta merkittävästi maailman tilaa". Toisin sanoen lomakkeet, joihin liittyy vain tietokantakyselyjä. Toinen näkökulma on, että useilla idempotentteilla kyselyillä on sama vaikutus kuin yhdellä kyselyllä. Jos tietokannan päivityksiä tai muita toimia, kuten käynnistäviä sähköpostiviestejä, on käytettävä POST-sovellusta.
Dropbox-kehittäjäblogista:
selain ei tiedä tarkalleen, mitä tietty HTML-muoto tekee, mutta jos lomake lähetetään HTTP GET: n kautta, selain tietää, että on turvallista yrittää uudelleen lähettää tiedosto automaattisesti, jos kyseessä on verkkovirhe. HTTP POSTia käyttävissä lomakkeissa ei ehkä ole turvallista yrittää uudelleen, joten selain kysyy käyttäjältä ensin vahvistusta.
"GET" -pyyntö on usein välimuisti, kun taas "POST" -pyyntö tuskin voi olla. Kyselyjärjestelmillä tällä voi olla huomattava tehokkuusvaikutus, varsinkin jos kyselyjonot ovat yksinkertaisia, koska välimuistit saattavat palvella yleisimpiä kyselyjä.
Joissakin tapauksissa käyttämällä LÄHETTÄÄ suositellaan jopa idempotentteihin kyselyihin:
Päivitetty 15. toukokuuta 2015: Erityisesti käytettäessä HTTPS: ää (HTTP TLS / SSL: n yli) POST tarjoaa enemmän turvallisuutta kuin GET?
Tämä on mielenkiintoinen kysymys. Oletetaan, että teet GET-pyynnön verkkosivulle:
SAA https://www.esimerkki.com/login.php?user=mickey&passwd=mini
Jos oletetaan, että Internet-yhteyttäsi tarkkaillaan, mitä tietoja tästä pyynnöstä saa snooper? Jos POST: ta käytetään sen sijaan ja käyttäjän ja passwd-tiedot sisältyvät POST-muuttujiin, ovatko ne turvallisempia HTTPS-yhteyksissä?
Vastaus on ei. Jos teet tällaisen GET-pyynnön, verkkoliikennettä seuraava hyökkääjä tietää vain seuraavat tiedot:
URL-osoitteen polkuosa - eli todellinen pyydetty sivu, samoin kuin kyselymerkkijonoparametrit - ovat suojattuja (salattuja), kun ne ovat "langan yli", ts. Kuljetettaessa matkalla kohdepalvelimelle. Tilanne on täsmälleen sama POST-pyynnöissä.
Tietysti web-palvelimet yleensä kirjaavat koko URL-osoitteen selkeästi pääsylokeihin; joten arkaluontoisen tiedon lähettäminen GET: n kautta ei ole hyvä idea. Tämä pätee riippumatta siitä käytetäänkö HTTP tai HTTPS.