HTTP POST zahtijeva dostavljanje dodatnih podataka od klijenta (preglednika) na poslužitelj u tijelu poruke. U kontrastu, DOBITI zahtjevi uključuju sve potrebne podatke u URL. Obrasci u HTML-u mogu se koristiti bilo kojom metodom specificiranjem Postupak = "POST" ili Postupak = „dobiti” (zadano) u prozoru element. Navedena metoda određuje kako se podaci obrasca predaju poslužitelju. Kad je metoda GET, svi podaci obrasca kodiraju se u URL, dodaju u radnja URL kao parametri niza upita. Uz POST, podaci obrasca pojavljuju se u tijelu poruke HTTP zahtjeva.
DOBITI | POST | |
---|---|---|
Povijest | Parametri ostaju u povijesti preglednika jer su dio URL-a | Parametri se ne spremaju u povijest preglednika. |
Knjiška oznaka | Može se označiti. | Ne može se označiti. |
Gumb NAZAD / ponajprije slanje | GET zahtjevi se ponovno izvršavaju, ali ne mogu se ponovo poslati poslužitelju ako je HTML spremljen u predmemoriji preglednika. | Preglednik obično upozorava korisnika da će podatke trebati ponovno dostaviti. |
Vrsta kodiranja (atribut enctype) | Primjena / x-www-form-urlencoded | multipart / data-data ili aplikacija / x-www-form-urlencoded Koristite višestrano kodiranje za binarne podatke. |
parametri | može slati, ali podaci o parametrima ograničeni su na ono što možemo umetnuti u liniju zahtjeva (URL). Najsigurnije za korištenje manje od 2K parametara, neki poslužitelji rade do 64K | Moguće je poslati parametre, uključujući prijenos datoteka, na poslužitelj. |
sjeckan | Lakše za krađu skripte za djecu | Teže hakirati |
Ograničenja vrste podataka | Da, dopušteni su samo ASCII znakovi. | Bez ograničenja. Dopušteni su i binarni podaci. |
sigurnosti | GET je manje siguran u odnosu na POST jer su poslani podaci dio URL-a. Tako se sprema u povijest preglednika i zapise poslužitelja u otvorenom tekstu. | POST je malo sigurniji od GET-a jer se parametri ne pohranjuju u povijesti preglednika ili u zapisnike web poslužitelja. |
Ograničenja u duljini podataka oblika | Da, budući da su podaci obrasca u URL-u, a duljina URL-a je ograničena. Sigurna granica duljine URL-a često je 2048 znakova, ali ovisi o pregledniku i web poslužitelju. | Bez ograničenja |
Upotrebljivost | GET metoda se ne smije koristiti za slanje lozinki ili drugih osjetljivih podataka. | POST metoda koja se koristi prilikom slanja lozinki ili drugih osjetljivih podataka. |
Vidljivost | GET metoda vidljiva je svima (bit će prikazana u adresnoj traci preglednika) i ograničava količinu informacija koje treba poslati. | Promjenjive metode POST nisu prikazane u URL-u. |
Cached | Može se predmemorirati | Nije predmemorirano |
Temeljna razlika između METODA = "GET" i METODA = "POST" jest da oni odgovaraju različiti HTTP zahtjevi, kako je definirano u HTTP specifikacijama. Postupak podnošenja za obje metode započinje na isti način - preglednik oblikuje skup podataka podataka obrasca, a zatim ih kodira na način koji specificira enctype atribut. Za METODA = "POST enctype atribut može biti multipart / oblik-podataka ili Primjena / x-www-form-urlencoded, dok za METODA = "GET", samo Primjena / x-www-form-urlencoded je dozvoljeno. Ovaj skup podataka obrasca zatim se prenosi na poslužitelj.
Za slanje obrasca s METHOD = "GET", preglednik konstruira URL uzimajući vrijednost radnja atribut, dodajući a ? na njega, zatim dodavanjem skupa podataka obrasca (kodiranog pomoću vrste sadržaja / x-www-form-urlencoded). Preglednik tada obrađuje ovaj URL kao da slijedi vezu (ili kao da je korisnik izravno upisao URL). Preglednik dijeli URL na dijelove i prepoznaje domaćina, a zatim njemu šalje GET zahtjev sa ostatkom URL-a kao argument. Poslužitelj ga uzima odatle. Imajte na umu da ovaj postupak znači da su podaci obrasca ograničeni na ASCII kodove. Posebno treba paziti na kodiranje i dekodiranje drugih vrsta znakova prilikom prolaska kroz URL u ASCII formatu.
Slanje obrasca s METHOD = "POST" uzrokuje slanje zahtjeva za POST koristeći vrijednost radnja atribut i poruka kreirana prema vrsti sadržaja koju je odredio enctype atribut.
Budući da se podaci obrasca šalju kao dio URL-a kada DOBITI koristi se --
U principu, obrada poslanih podataka obrasca ovisi o tome je li poslana METODA = "GET" ili METODA = "POST". Budući da se podaci kodiraju na različite načine, potrebni su različiti mehanizmi dekodiranja. Stoga, općenito govoreći, promjena METODE može zahtijevati promjenu skripte koja obrađuje prijavu. Na primjer, kada se koristi CGI sučelje, skripta prima podatke u varijabli okruženja (QUERYSTRING) kada DOBITI koristi se. Ali kada POST koristi se, obrazac se prenosi u standardnom ulaznom toku (stdin), a broj bajtova za čitanje daje se u zaglavlju duljine sadržaja.
GET se preporučuje prilikom slanja "idempotentnih" obrazaca - onih koji "ne mijenjaju značajno stanje svijeta". Drugim riječima, obrasci koji uključuju samo upite u bazu podataka. Druga je perspektiva da će nekoliko idempotentnih upita imati isti učinak kao jedan upit. Ako su u pitanju ažuriranja baze podataka ili druge radnje poput pokretanja e-poruka, preporučuje se uporaba POST-a.
S bloga programera Dropbox:
preglednik ne zna točno što određeni HTML obrazac radi, ali ako se obrazac predaje putem HTTP GET-a, preglednik zna da je sigurno automatski pokušati ponovno pokrenuti ako postoji mrežna greška. Za obrasce koji koriste HTTP POST možda nije sigurno pokušati ponovo, pa preglednik prvo traži od korisnika potvrdu.
Zahtjev "GET" često je predmemoriran, dok zahtjev "POST" teško može biti. Za sustave upita ovo može imati značajan učinak na učinkovitost, pogotovo ako su nizovi upita jednostavni, jer predmemori mogu poslužiti najčešće upitima.
U određenim slučajevima pomoću POST preporučuje se čak i za idempotentne upite:
Ažurirano 15. svibnja 2015.: Posebno nudi li POST putem HTTPS-a (HTTP preko TLS / SSL-a) veću sigurnost od GET-a?
Ovo je zanimljivo pitanje. Recite da upućujete GET zahtjev na web stranicu:
DOBITE https://www.example.com/login.php?user=mickey&passwd=mini
Pod pretpostavkom da se internetska veza nadzire, koje će informacije o ovom zahtjevu biti dostupne snooperu? Ako se umjesto toga upotrebljava POST, a podaci korisnika i passwd uključeni su u POST varijable, hoće li to biti sigurnije u slučaju HTTPS veza?
Odgovor je ne. Ako postavite takav GET zahtjev, napadač će pratiti vaše podatke o web prometu samo sljedeće informacije:
Dio putanje URL-a - tj. Stvarna tražena stranica, kao i parametri niza upita - zaštićeni su (šifrirani) dok su „preko žice“, tj. U tranzitu na putu do odredišnog poslužitelja. Situacija je potpuno ista za POST zahtjeve.
Naravno, web-poslužitelji imaju tendenciju da cijeli URL zapisuju običnim tekstom u svojim zapisnicima pristupa; pa slanje osjetljivih podataka putem GET-a nije dobra ideja. Ovo se primjenjuje bez obzira koristi li se HTTP ili HTTPS.