GET vs. POST

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.

Usporedni grafikon

GET u odnosu na POST usporedbu grafikona
DOBITIPOST
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

Sadržaj: GET vs POST

  • 1 Razlike u podnošenju obrasca
    • 1.1 Za i protiv
  • 2 razlike u obradi na strani poslužitelja
  • 3 Preporučena upotreba
  • 4 Što je s HTTPS-om?
  • 5 Reference

Razlike u podnošenju obrasca

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.

Za i protiv

Budući da se podaci obrasca šalju kao dio URL-a kada DOBITI koristi se --

  • Podaci obrasca ograničeni su na ASCII kodove. Posebno treba paziti na kodiranje i dekodiranje drugih vrsta znakova prilikom prolaska kroz URL u ASCII formatu. S druge strane, binarni podaci, slike i druge datoteke mogu se poslati putem METODA = "POST"
  • Svi ispunjeni podaci obrasca vidljivi su u URL-u. Nadalje, pohranjuje se i u korisničku povijest pregledavanja / zapisnike web preglednika. Ta pitanja čine DOBITI manje siguran.
  • Međutim, jedna prednost podataka oblika koji se šalju kao dio URL-a je ta što možete označiti URL-ove i izravno ih koristiti te potpuno zaobići postupak popunjavanja obrazaca.
  • Postoji ograničenje u tome koliko podataka podataka obrasca može biti poslano jer je duljina URL-a ograničena.
  • Klinci na skriptama mogu lakše izložiti ranjivosti u sustavu da ih hakiraju. Na primjer, Citibank je bio hakiran promjenom brojeva računa u URL-u.[1] Naravno, iskusni hakeri ili web programeri mogu izložiti takve ranjivosti čak i ako se koristi POST; samo je malo teže. Općenito, poslužitelj mora biti sumnjiv prema bilo kakvim podacima koje mu klijent pošalje i zaštititi se od nesigurnih referenci izravnih objekata.

Razlike u obradi na strani poslužitelja

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.

Preporučena upotreba

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:

  • Ako podaci obrasca sadrže znakove koji nisu ASCII (poput znakova s ​​naglaskom), zatim METODA = "GET" je u principu neprimjenjivo, iako može raditi u praksi (uglavnom za ISO Latin 1 znak).
  • Ako je skup podataka obrasca velik - recimo, stotine likova - tada METODA = "GET" može uzrokovati praktične probleme s implementacijama koje ne mogu podnijeti tako duge URL-ove.
  • Možda biste željeli izbjeći METODA = "GET" kako bi korisnicima učinili manje vidljivim kako obrazac radi, posebice kako bi se skrivena polja (INPUT TYPE = "HIDDEN") učinila skrivenijima ne pojavljivanjem u URL-u. Ali čak i ako koristite skrivena polja sa METODA = "POST", oni će se i dalje pojaviti u izvornom HTML kodu.

Što je s HTTPS-om?

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:

  1. Činjenica da ste uspostavili HTTPS vezu
  2. Ime domaćina - www.example.com
  3. Ukupna dužina zahtjeva
  4. Duljina odgovora

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.

Reference

  • wikipedia: POST (HTTP)
  • Metode zahtjeva za HTTP
  • HTTP pošta - W3.org
  • HTTP Get - W3.org
  • Da li HTTPS skriva URL-ove kojima se pristupa? - Razmjena stokova