HTTP POST zahteva posredovanje dodatnih podatkov odjemalca (brskalnika) strežniku v telesu sporočil. V nasprotju, DOBI zahteve vključujejo vse zahtevane podatke v URL. Obrazci v HTML lahko uporabite katero koli metodo tako, da določite metoda = "POST" ali metoda = "DOBI" (privzeto) v element. Navedena metoda določa, kako se podatki obrazca oddajo strežniku. Ko je metoda GET, so vsi podatki obrazca kodirani v URL, priloženi k ukrepanje URL kot parametri niza poizvedbe. Z POST se podatki obrazca prikažejo v telesu sporočila zahteve HTTP.
DOBI | POST | |
---|---|---|
Zgodovina | Parametri ostanejo v zgodovini brskalnika, ker so del URL-ja | Parametri niso shranjeni v zgodovini brskalnika. |
Zaznamek | Lahko je zaznamek. | Ni mogoče zaznamek. |
Gumb NAZAJ / ponazorite znova | Zahteve GET se ponovno izvršijo, vendar jih morda ne bodo ponovno poslali strežniku, če je HTML shranjen v predpomnilniku brskalnika. | Brskalnik običajno opozori uporabnika, da bo treba podatke ponovno predložiti. |
Vrsta kodiranja (atribut enctype) | prijava / x-www-form-urlencoded | multipart / form-data ali aplikacija / x-www-form-urlencoded Uporabite večdelno kodiranje za binarne podatke. |
Parametri | lahko pošljemo, vendar so podatki parametrov omejeni na tisto, kar lahko vstavimo v zahtevno vrstico (URL). Najvarneje je uporabljati manj kot 2K parametrov, nekateri strežniki pa do 64K | Na strežnik lahko pošlje parametre, vključno z nalaganjem datotek. |
Hakirani | Lažje kramp za skripte otroške | Težje za hec |
Omejitve glede vrste podatkov obrazca | Da, dovoljeni so samo ASCII znaki. | Brez omejitev. Dovoljeni so tudi binarni podatki. |
Varnost | GET je manj varen v primerjavi s POST, ker so poslani podatki del URL-ja. Torej je shranjena v zgodovini brskalnika in dnevnikih strežnikov v odprtem besedilu. | POST je nekoliko varnejši od GET, ker parametri niso shranjeni v zgodovini brskalnika ali v dnevnikih spletnega strežnika. |
Omejitve glede dolžine podatkov obrazca | Da, saj so podatki obrazca v URL-ju in je dolžina URL-ja omejena. Omejitev dolžine varne URL-je je pogosto 2048 znakov, vendar se razlikuje glede na brskalnik in spletni strežnik. | Brez omejitev |
Uporabnost | GET metode se ne sme uporabljati pri pošiljanju gesel ali drugih občutljivih informacij. | Metoda POST, ki se uporablja pri pošiljanju gesel ali drugih občutljivih informacij. |
Vidnost | Metoda GET je vidna vsem (prikazana bo v naslovni vrstici brskalnika) in ima omejitve glede količine informacij za pošiljanje. | Spremenljivke metode POST niso prikazane v URL-ju. |
Predpomnjeno | Lahko se predpomni | Ni predpomnjeno |
Temeljna razlika med METHOD = "DOBI" in METHOD = "POST" je, da ustrezajo različne zahteve HTTP, kot je opredeljeno v specifikacijah HTTP. Postopek oddaje za obe metodi se začne na enak način - brskalnik oblikuje niz podatkov o obrazcu in ga nato kodira na način, ki ga določi entipe atribut. Za METHOD = "POST the entipe atribut je lahko podatki o več delih / oblikah ali prijava / x-www-form-urlencoded, ker za METHOD = "DOBI", samo prijava / x-www-form-urlencoded je dovoljeno. Ta niz podatkov obrazca se nato pošlje strežniku.
Za oddajo obrazca z METHOD = "GET" brskalnik ustvari URL tako, da sprejme vrednost ukrepanje atribut, dodatek a ? vanj, nato pa doda dodatek podatkov obrazca (kodiran z uporabo vsebine type / x-www-form-urlencoded type). Brskalnik nato obdela ta URL, kot da sledi povezavi (ali kot da bi uporabnik neposredno vtipkal URL). Brskalnik razdeli URL na dele in prepozna gostitelja, nato pa temu gostitelju pošlje zahtevo GET s preostankom URL-ja kot argument. Strežnik ga odnese od tam. Upoštevajte, da ta postopek pomeni, da so podatki obrazca omejeni na kode ASCII. Posebno previdno je treba kodirati in dekodirati druge vrste znakov, ko jih prenašate skozi URL v obliki ASCII.
Predložitev obrazca z METHOD = "POST" povzroči pošiljanje zahteve POST z uporabo vrednosti ukrepanje atribut in sporočilo, ustvarjeno glede na vrsto vsebine, ki jo določi entipe atribut.
Ker se podatki obrazca pošljejo kot del URL-ja ob DOBI se uporablja --
Načeloma je obdelava poslanih podatkov obrazca odvisna od tega, ali so poslani METHOD = "DOBI" ali METHOD = "POST". Ker so podatki kodirani na različne načine, so potrebni različni mehanizmi dekodiranja. Tako lahko na splošno sprememba METODA zahteva spremembo skripte, ki obdela oddajo. Na primer, ko uporabljate vmesnik CGI, skript prejme podatke v spremenljivki okolja (QUERYSTRING), kadar DOBI se uporablja. Ampak ko POST Uporabite, podatki obrazca se pošljejo v standardni vhodni tok (stdin), število bajtov, ki jih je treba prebrati, pa poda glava vsebine.
GET se priporoča pri oddaji obrazcev "idempotent" - tistih, ki "bistveno ne spremenijo stanja sveta". Z drugimi besedami, obrazci, ki vključujejo samo poizvedbe v bazi podatkov. Druga perspektiva je, da bo več idempotentnih poizvedb imelo enak učinek kot ena poizvedba. Če gre za posodobitve baze podatkov ali druga dejanja, kot je sprožitev e-poštnih sporočil, priporočamo uporabo POST.
Na spletnem dnevniku za razvijalce Dropbox:
brskalnik ne ve natančno, kaj določen obrazec HTML počne, če pa je obrazec predložen prek HTTP GET, brskalnik ve, da je varno samodejno znova poskusiti znova, če pride do napake v omrežju. Za obrazce, ki uporabljajo HTTP POST, morda ni varno znova, zato brskalnik najprej vpraša uporabnika za potrditev.
Zahteva "GET" je pogosto predpomnjena, medtem ko zahteva "POST" skoraj ne more biti. Za poizvedbene sisteme ima to lahko pomemben učinek, zlasti če so poizvedbeni nizi preprosti, saj lahko predpomnilniki služijo najpogostejšim poizvedbam.
V nekaterih primerih z uporabo POST se priporoča tudi pri idempotentnih poizvedbah:
Posodobljeno 15. maja 2015: POST ponuja, če uporabljate HTTPS (HTTP prek TLS / SSL) večjo varnost kot GET?
To je zanimivo vprašanje. Recite, da na spletno stran vložite zahtevo GET:
DOBITE https://www.example.com/login.php?user=mickey&passwd=mini
Ob predpostavki, da se vaša internetna povezava nadzira, katere informacije o tej zahtevi bodo na voljo ostrostrelcu? Če se namesto tega uporablja POST in so podatki uporabnika in passwd vključeni v spremenljivke POST, bodo to bolj varne v primeru povezav HTTPS?
Odgovor je ne. Če vložite takšno zahtevo GET, bo napadalec nadziral vaš spletni promet le naslednje podatke:
Del poti URL-ja - to je dejanska zahtevana stran, pa tudi parametri poizvedbenega niza - so zaščiteni (šifrirani), medtem ko so na poti do ciljnega strežnika "čez žico", tj. Situacija je popolnoma enaka za zahteve POST.
Seveda spletni strežniki beležijo celoten URL v navadnem besedilu v svojih dostopnih dnevnikih; zato pošiljanje občutljivih informacij prek GET ni dobra ideja. To velja ne glede na to, ali se uporablja HTTP ali HTTPS.