Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Vijesti
  • HTTP GET, POST i PUT zahtjevi. Učenje rada s GET i POST zahtjevima

HTTP GET, POST i PUT zahtjevi. Učenje rada s GET i POST zahtjevima

Korištenje GET i POST metoda u PHP-u teško je precijeniti, budući da se ove metode nalaze na gotovo svakoj web stranici. Prije proučavanja dolje opisanog materijala, savjetujem vam da se upoznate s html oznakom

. Pogledajmo svaku od ovih metoda u detalje.

GET metoda

Metoda GET koristi URL niz za prijenos podataka. Možda ste primijetili dugačke i nejasne URL-ove. Na primjer: funkcija.php?login=Alex&email=dezyakin. U ovom slučaju podaci se obrađuju u function.php. Nakon upitnika "?" nalazi se popis proslijeđenih parametara (parametri su odvojeni znakom "&") s vrijednostima: parametru za prijavu dodijeljena je vrijednost Alex, a varijabli e-pošte dodijeljena je vrijednost dezyakin. Podaci će biti pohranjeni u superglobalnom polju $_GET. U nastavku je prikazan primjer korištenja GET metode:

Prijaviti se: Email: Koristeći superglobalni niz $_GET, prikazujemo prihvaćene vrijednosti:*/ jeka "
prijava = ". $_GET["prijava"] ; echo "
email = ". $_GET["email"] ; ?>

Primijetite kako čitamo vrijednosti iz $_GET superglobalnog niza: $_GET["naziv_varijable"]. U našem primjeru, imena varijabli deklarirana su u obliku (ime=prijava i ime=e-mail).

Savjet:
Prije obrade primljenih vrijednosti, savjetujem vam da provjerite njihovo postojanje kroz funkcije isset(ime_varijable) ili prazno(ime_varijable)- o ovim funkcijama se govorilo u prethodnoj lekciji 2: varijable u PHP-u. Na primjer:

provjera postojanja pomoću isset-a: if isset ($_GET["login"] ) ( operatori za rukovanje prijavom ... } //ili provjerite postojanje koristeći prazno: ako je prazno ($_GET["e-pošta"] ) ( operatori za obradu elektronske pošte ... } ?>

U obrascu možete odrediti naziv datoteke koja će obrađivati ​​prenesene vrijednosti. To se radi pomoću atributa akcije obrasca, kojem se može dodijeliti adresa ove datoteke. Prema zadanim postavkama, ova je datoteka dodijeljena trenutnoj datoteci (odnosno, obrađuje se u datoteci u kojoj se obrazac nalazi). Evo primjera u kojem se podaci iz obrasca prenose u datoteku srcipt.php za obradu:

Prijaviti se: Email:

Datoteka script.php mora sadržavati neku vrstu rukovatelja informacijama, inače će informacije biti proslijeđene kao prazne.

GET metoda ima mnogo nedostataka:

  • Korisnik vidi vrijednosti proslijeđenih parametara;
  • Korisnik može lako krivotvoriti proslijeđene parametre;
  • Neprikladan prijenos binarnih informacija (morate ih kodirati u tekstualni format);
  • Količina prenesenih podataka je ograničena - 8 KB;

Zbog navedenih nedostataka, GET metoda se koristi samo u slučajevima kada je potrebno prenijeti malu količinu podataka, a ti podaci nisu klasificirani ni na koji način.

POST metoda

POST metoda razlikuje se od GET-a po tome što se podaci prenose u privatnom obliku. Postoji superglobalni niz $_POST iz kojeg se podaci mogu čitati ovako: $_POST["naziv_varijable"]. Na primjer:

Prijaviti se: "> E-pošta: ">
Koristeći superglobalni niz $_POST, prikazujemo prihvaćene vrijednosti:*/ jeka "
prijava = ". $_POST["prijava"] ; echo "
email = ". $_POST["email"] ; ?>

Rezultat izvršavanja gornjeg koda prikazan je na slici ispod:

Kao što vidite, URL nema nikakav postscript, ali unatoč tome podaci su primljeni i prikazani.

Bilješka:
1) Količina vrijednosti prenesenih metodom POST ograničena je prema zadanim postavkama i jednaka je 8 MB. Za povećanje ove vrijednosti morate promijeniti post_max_size direktivu u php.ini.

2) U ranijim verzijama PHP-a, umjesto kratkih imena superglobalnih polja $_GET i $_POST, korištena su duža imena: $HTTP_GET_VARS i $HTTP_POST_VARS. Prema zadanim postavkama one su onemogućene u PHP 5, ali ih možete omogućiti u konfiguracijskoj datoteci php.ini pomoću parametra register_long_arrays. U verziji php 6 ova duga imena neće biti dostupna.

3) Prije obrade varijabli iz $_POST, savjetujem vam da provjerite prisutnost varijabli, baš kao što je učinjeno s metodom GET.

Stvaranje internetskog standarda Web 2.0 omogućilo je korisniku ne samo primanje informacija, već i aktivnu interakciju s drugim korisnicima i internetskim uslugama. Kako bi se organizirale takve povratne informacije, u HTML jezik uvedene su dodatne oznake koje omogućuju slanje traženih informacija na poslužitelj. Na primjer, to može biti obrazac za registraciju, ili obrazac za dodavanje komentara, ili postavljanje osobnog računa (stranica na društvenoj mreži) itd. U ovom poglavlju ćemo pogledati skup oznaka koje vam omogućuju organiziranje interakcije korisnika sa web mjestom.

6.1. GET i POST zahtjevi

Da bi organizirao interakciju korisnika s Internetom, programer stranice mora osigurati prijenos zahtjeva od korisnika stranice do poslužitelja na kojem se stranica nalazi. Postoje dvije vrste zahtjeva: GET i POST zahtjevi.

DOBITI-zahtjevi

U ranoj fazi razvoja interneta postojali su samo GET zahtjevi. Predstavljaju prijenos podataka izravno u adresnu traku preglednika i imaju sljedeću sintaksu:

http://domena/stranica?[parametar1=vrijednost1][¶metar2=vrijednost2]...

Ovdje skup podataka prenesenih na poslužitelj počinje znakom ‘?’ i odvojen je znakom ‘&’. Sam podatak je par

parametar=vrijednost

Na primjer, ako trebate proslijediti ime i prezime korisnika na stranicu za registraciju (na primjer, register.php) stranice mysite.com, to bi izgledalo ovako:

http://mysite.com/register.php?fname=Ivan&lname=Ivanov

Imajte na umu da preglednici zastarjelih verzija možda neće ispravno percipirati ćirilicu i prijenos ruskih slova bit će izvršen netočno. Bolje je u GET zahtjevima prenositi isključivo servisne informacije u obliku brojeva i riječi na latinici.

Nedostatak GET zahtjeva je ograničeni prijenos podataka. Na strani poslužitelja, niz upita ograničen je na neku maksimalnu vrijednost. Na primjer, ako maksimalna veličina zahtjeva može biti 1024 znaka, tada će sve što premaši ovu vrijednost biti izbrisano i tada dio prenesenih informacija neće biti obrađen na navedenoj stranici web mjesta. Drugo značajno ograničenje je mogućnost prijenosa strogo definiranih skupova znakova. Na primjer, simboli? i & već su rezervirani i ne mogu se proslijediti kao vrijednosti parametra. Međutim, ovo se pravilo može zaobići ako niz upita ne sadrži sam znak, već njegovu vrijednost koda. Da biste to učinili, upotrijebite znak '%' iza kojeg slijedi šifra znaka, na primjer ovako:

http://mysite.com/register.php?fname=%CC%DF%AD%1F%DS&lname=%DD

Ovdje su vrijednosti koda dane u heksadecimalnom obliku kako bi se uštedjela duljina upita.

Unatoč ovim nedostacima, stvaranje web stranica bez GET zahtjeva bilo bi izuzetno teško. Na primjer, oni su nezamjenjivi u slučajevima početne inicijalizacije stranice web-mjesta za određenog korisnika, kada zahtjev navodi ne samo web-mjesto i trenutnu stranicu, već i njegov ID, kao što je to učinjeno u društvenoj mreži VKontakte:

http://vk.com/profile.php?id=12345678

GET zahtjevi se također često koriste za provjeru ispravnosti email adrese prilikom registracije korisnika. U tom slučaju korisnik na navedenu e-mail adresu prima e-mail s aktivacijskim linkom, a taj link je GET zahtjev.

POST-zahtjevi

Kako bi se riješili ovi nedostaci GET zahtjeva, dodani su POST zahtjevi, koji omogućuju prijenos velikih količina podataka u binarnom obliku, tj. bez iskrivljenja ili promjena u prenesenim podacima. Takvi su zahtjevi prikladni za učitavanje datoteka i slika na poslužitelj. Na primjer, kada korisnik postavi sliku na svoj profil društvene mreže, za to se koriste POST zahtjevi. Više detalja o organizaciji POST zahtjeva bit će objašnjeno u nastavku.

Možda ste primijetili da na većini stranica možete vidjeti sljedeće adrese:

Http://site/index.php?blog=2

Ovdje čak i bez poznavanja php-a možete pogoditi da pristupamo datoteci indeks.php Ali malo ljudi zna što dolazi nakon upitnika. Vrlo je jednostavno: ?blog=2 Ovo je deklaracija globalne varijable "$_GET["blog"]" s vrijednošću "2". Dakle, prosljeđujem varijablu u skriptu koja je odgovorna za prikaz informacija iz baze podataka. Napišimo malu skriptu u kojoj možete jasno vidjeti sve:

if(isset($_GET["blog"])) (
echo $_GET["blog"];
}
?>

Koristimo operator uvjeta if(), a sljedeći redak se koristi kao uvjet:

Isset($_GET["blog"])

isset() vam omogućuje da saznate postoji li varijabla navedena u zagradama, odnosno uvjet koji sam opisao u kodu zvuči ovako: Ako varijabla $_GET["blog"] postoji, onda prikažite sadržaj ove varijable na ekranu. Evo što se dogodilo:

Mislim da je jasno Stvorena je globalna varijabla $_GET s identifikatorom koji smo deklarirali u adresnoj traci ( u ovom slučaju s identifikatorom "blog")

Sada želim razjasniti jednu stvar. Pretpostavimo da trebamo deklarirati dvije varijable, kako to učiniti? Prva varijabla deklarirana je nakon upitnika "?" Druga varijabla je deklarirana nakon znaka “&” ( Da budem iskren, ne znam koji je ovo znak), evo primjera deklaracije tri varijable:

Http://site/index.php?a=1&b=2&c=3

Evo izlaznog koda:

if(isset($_GET["a"]) I isset($_GET["b"]) I isset($_GET["c"])) (
echo $_GET["a"]."
";
echo $_GET["b"]."
";
echo $_GET["c"]."
";
}
?>

Stanje zvuči ovako:

Ako postoji globalna varijabla $_GET["a"] i globalna varijabla $_GET["b"] i globalna varijabla $_GET["c"] onda ih prikaži na ekranu, evo rezultata:

Obrasci

Prije nego što dođemo do objaviti zahtjeva, morate razumjeti što su obrasci? Zašto je to potrebno? Zato što je globalna varijabla $_POST[""] stvorena putem obrazaca. Što je forma? Ovo su polja u koja korisnik može unijeti neke podatke. Postoje polja s jednim redom, velika polja, kao i radio gumbi i potvrdni okviri. Krenimo sve redom...

Obrazac je oznaka:


elementi forme

Obrazac ima atribute, navest ću najčešće:

Kreirajmo obrazac:


elementi forme

Postavio sam datoteku kao datoteku rukovatelja test.php budući da u njemu pišem primjere za vas. Postavio sam način slanja na objavu jer su to načini koji se koriste u 99,9% slučajeva. Našoj formi sam dao i ime - forma

Uronimo sada u svijet elemenata oblika. Prvo što morate shvatiti je da su gotovo svi elementi oznake razlika je samo u atributu tip na ovim oznakama. Dopustite mi da nabrojim korištene elemente obrasca:

Siguran sam da ste više puta vidjeli takva polja, pa evo kako kažu: "bez komentara"

Kreirajmo sada mali upitnik za obuku s kojim ćemo dalje raditi. Naš zadatak je izraditi mali upitnik koji će nam reći ime osobe koja ga ispunjava, spol, iz koje zemlje je, omiljenu boju i tekstualno polje u koje korisnik može dodati nešto o sebi. Evo što sam dobio:

Vaše prezime Ime i patronim:

Koji je tvoj spol:
M
I

Iz koje si zemlje



Omiljena boja(e):

Crno:
Crvena:
Bijelo:
Još:

O meni:




Imajte na umu da gotovo svaka oznaka ima atribut vrijednost, čemu služi? Bilježi podatke koje ćete prenijeti na drugu stranicu. Nadam se da je jasno

Ako sada pokrenemo ovaj kod u pregledniku, vidjet ćemo sljedeće:

Za obrazac sam koristio atribut akcijski sa značenjem test.php to znači, kao što sam već rekao, da će podaci iz obrasca biti prebačeni u datoteku test.php.

POST zahtjev

Sada napišimo PHP kod koji će nam omogućiti da vidimo podatke koje smo unijeli. Gdje su podaci pohranjeni? U slučaju get zahtjeva, naši su podaci bili u globalnoj varijabli $_GET[""]. Prilikom postavljanja zahtjeva za objavu, podaci će biti pohranjeni u globalnoj varijabli $_POST[""]. U uglatim zagradama morate napisati, kao u slučaju globalne varijable get, identifikator. Pitanje je gdje mogu nabaviti taj identifikator? Zato nam je potreban atribut name na elementima forme! Upravo ta imena služe kao naš ključ u globalnom nizu poruka. Pa, počnimo s opisom skripte:

if(isset($_POST["submit"])) (
echo "Puno ime: ".$_POST["fio"]."
";
echo "Spol: ".$_POST["spol"]."
";
echo "Zemlja prebivališta: ".$_POST["grad"]."
";

Echo "Omiljena boja(e):
";
echo $_POST["color_1"]."
";
echo $_POST["color_2"]."
";
echo $_POST["color_3"]."
";
echo $_POST["color_4"]."
";
echo "O sebi: ".$_POST["o"]."


";
}
?>

If uvjet koji smo napisali kaže: Ako postoji globalna varijabla $_POST["submit"] tada prikazujemo podatke na ekranu. Ova globalna varijabla se stvara ako kliknemo na gumb za slanje, zbog čega je atribut imena u gumbu potreban u ovom primjeru. Možda se pitate zašto je atribut naziva gumba neobavezan? Sasvim je jednostavno. Tipično, programator ne nadzire pritisak gumba, već nadzire poslane podatke. Za ispravan rad, primjerice, kontakt forme, potrebno je pratiti ne klik na gumb, već ispravnost unesenih podataka, te saznati jesu li ti podaci uopće uneseni. U našem primjeru nismo provjeravali poslane podatke, već jednostavno pratili pritisak na gumb, da pojednostavimo primjer... Evo što smo dobili:

Zaključak

Pa, danas smo pogledali dvije metode prijenosa podataka između skripti, a upoznali smo se i s formama. Stvarno se nadam da će vam ove informacije biti korisne barem negdje. Ako imate pitanja ili razmišljanja, napišite komentare. Sretno vam bilo, to je sve za danas!

P.S.: Želite li da računalne igre postanu još realističnije? directx 11 za Windows 7 može se besplatno preuzeti na Windows in! Uživajte u prekrasnoj grafici!

Ovaj post je odgovor na pitanje postavljeno u komentaru na jedan od mojih članaka.

U ovom članku želim vam reći što su HTTP metode GET/POST/PUT/DELETE i druge, zašto su izmišljene i kako ih koristiti u skladu s REST-om.

HTTP

Dakle, koji je jedan od glavnih internetskih protokola? Pedante ću poslati na RFC2616, a ostalo ću reći ljudski :)

Ovaj protokol opisuje interakciju između dva računala (klijenta i poslužitelja), izgrađenu na temelju poruka koje se nazivaju zahtjev (Request) i odgovor (Response). Svaka poruka sastoji se od tri dijela: početne linije, zaglavlja i tijela. U ovom slučaju potrebna je samo startna linija.

Početni redovi za zahtjev i odgovor imaju različite formate - zanima nas samo početni redak zahtjeva koji izgleda ovako:

URI METODE HTTP/ VERZIJA ,

Gdje je METHOD metoda HTTP zahtjeva, URI je identifikator resursa, VERSION je verzija protokola (trenutno je aktualna verzija 1.1).

Zaglavlja su skup parova ime-vrijednost odvojenih dvotočkom. Zaglavlja prenose različite servisne informacije: kodiranje poruke, naziv preglednika i verziju, adresu s koje je klijent došao (Referrer) i tako dalje.

Tijelo poruke su stvarni podaci koji se prenose. U odgovoru se prenosi podatak obično o HTML stranici koju je preglednik tražio, au zahtjevu se, primjerice, u tijelu poruke prenosi sadržaj datoteka uploadanih na poslužitelj. Ali u pravilu u zahtjevu uopće nema tijela poruke.

Primjer HTTP interakcije

Pogledajmo primjer.

Zahtjev:
GET /index.php HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Prihvati: tekst/html Veza: zatvori
Prvi redak je redak upita, ostalo su zaglavlja; tijelo poruke nedostaje

Odgovor:
HTTP/1.0 200 OK Server: nginx/0.6.31 Content-Language: ru Content-Type: text/html; charset=utf-8 Dužina sadržaja: 1234 Veza: zatvori ... SAMA HTML STRANICA...

Resursi i metode

Vratimo se na početni redak zahtjeva i zapamtimo da on sadrži takav parametar kao što je URI. Ovo je kratica za Uniform Resource Identifier - jedinstveni identifikator izvora. Resurs je u pravilu datoteka na poslužitelju (primjer URI-ja u ovom slučaju je “/styles.css”), ali općenito resurs može biti i neki apstraktni objekt (“/blogs/webdev/” - točke na "Web" razvoj bloka" umjesto na određenu datoteku).

Vrsta HTTP zahtjeva (također nazvana HTTP metoda) govori poslužitelju koju radnju želimo izvesti na resursu. U početku (ranih 90-ih) pretpostavljalo se da klijent od resursa može željeti samo jednu stvar - da ga primi, ali sada pomoću HTTP protokola možete kreirati postove, uređivati ​​profil, brisati poruke i još mnogo toga. A ove radnje teško je spojiti s pojmom "primanje".

Za razlikovanje radnji od resursa na razini HTTP metoda izmišljene su sljedeće opcije:

  • DOBITI - dobivanje resursa
  • POST - stvaranje resursa
  • PUT - ažuriranje resursa
  • DELETE - brisanje resursa
Imajte na umu da HTTP specifikacija ne zahtijeva da poslužitelj razumije sve metode (kojih zapravo ima mnogo više od 4) - potreban je samo GET, a također ne govori poslužitelju što bi trebao učiniti kada primi zahtjev s određenim metoda. To znači da poslužitelj kao odgovor na DELETE /index.php HTTP/1.1 zahtjev nije dužan izbrišite index.php stranicu na poslužitelju, isto kao i za GET /index.php HTTP/1.1 zahtjev nije dužan vrati ti index.php stranicu, može je obrisati na primjer :)

OSTALO dolazi u obzir

REST (REpresentational State Transfer) je pojam koji je 2000. godine uveo Roy Fielding, jedan od developera HTTP protokola, kao naziv grupe principa za izgradnju web aplikacija. Općenito, REST pokriva šire područje od HTTP-a - također se može koristiti u drugim mrežama s drugim protokolima. REST opisuje principe interakcije između klijenta i poslužitelja, temeljene na konceptima “resursa” i “glagola” (može se shvatiti kao subjekt i predikat). U slučaju HTTP-a, resurs je identificiran svojim URI-jem, a glagol je HTTP metoda.

REST predlaže napuštanje upotrebe istog URI-ja za različite resurse (to jest, adrese dvaju različitih članaka poput /index.php?article_id=10 i /index.php?article_id=20 - ovo nije REST način) i koristeći različite HTTP metode za različite akcije. Odnosno, web aplikacija napisana korištenjem REST pristupa će obrisati resurs kada mu se pristupi metodom HTTP DELETE (naravno, to ne znači da je potrebno dati mogućnost brisanja svega i svakoga, ali bilo koji zahtjev za brisanje aplikacije mora koristiti metodu HTTP DELETE).

REST daje programerima mogućnost pisanja standardiziranih i malo ljepših web aplikacija nego prije. Korištenjem REST-a, URI za dodavanje novog korisnika neće biti /user.php?action=create (metoda GET/POST), već jednostavno /user.php (metoda striktno POST).

Kao rezultat toga, kombiniranjem postojeće HTTP specifikacije i REST pristupa, različite HTTP metode konačno imaju smisla. GET - vraća resurs, POST - stvara novi, PUT - ažurira postojeći, DELETE - briše ga.

Problemi?

Da, postoji mali problem s korištenjem REST-a u praksi. Ovaj problem se zove HTML.

Zahtjevi PUT/DELETE mogu se slati korištenjem XMLHttpRequesta, ručnim kontaktiranjem poslužitelja (recimo, putem curla ili čak putem telneta), ali ne možete napraviti HTML obrazac koji šalje potpuni zahtjev PUT/DELETE.

Stvar je u tome što vam HTML specifikacija ne dopušta stvaranje obrazaca koji šalju podatke osim putem GET ili POST. Stoga, da biste normalno radili s drugim metodama, morate ih umjetno oponašati. Na primjer, u Racku (mehanizam na temelju kojeg Ruby komunicira s web poslužiteljem; Rails, Merb i drugi Ruby frameworki napravljeni su pomoću Racka) možete dodati skriveno polje u formu s nazivom "_method" i navedite naziv metode kao vrijednost (npr. "PUT") - u ovom slučaju će biti poslan POST zahtjev, ali će se Rack moći pretvarati da je primio PUT, a ne POST.

Ovaj post ima za cilj objasniti principe prijenosa podataka na Internetu koristeći dvije glavne metode: GET i POST. Napisao sam ga kao dodatak uputama za generator rasporeda smjena za one koje detalji vjerojatno neće zanimati ☺.

Idite na sljedeću adresu (ovo je za vizualno objašnjenje): http://calendarin.net/calendar.php?year=2016 Obratite pozornost na adresnu traku preglednika: calendarin.net/calendar.php ?godina=2016 Glavna datoteka ima naziv nakon kojeg slijedi upitnik (?) i parametar "godina" s vrijednošću "2016". Dakle, sve što slijedi iza upitnika je GET zahtjev. Jednostavno je. Za prosljeđivanje više od jednog parametra, oni moraju biti odvojeni znakom & (&). Primjer: calendarin.net/calendar.php ?year=2016&display=radni-i-slobodni dani

Glavna datoteka i dalje ima naziv, nakon čega slijedi upitnik (?), zatim parametar "godina" s vrijednošću "2016", zatim znak & (&), zatim parametar "prikaz" s vrijednošću "radni dani- i-dani” -off".

GET parametri mogu se mijenjati izravno u adresnoj traci preglednika. Na primjer, promjena vrijednosti "2016" u "2017" i pritisak na tipku odvest će vas na kalendar za 2017. godinu.

Ovo je skriveni prijenos podataka (adresa stranice se ne mijenja); odnosno možete vidjeti samo ono što je preneseno pomoću programa (skripte). Na primjer, u sljedećem alatu za brojanje znakova u tekstu, izvorni podaci se prenose metodom POST: http://usefulonlinetools.com/free/character-counter.php

Ako imate bilo kakvih pitanja, komentara i moja e-pošta stoji vam na usluzi.

Osim GET metode, o kojoj smo govorili u prethodnom postu, postoji još jedna metoda za slanje zahtjeva putem HTTP protokola - POST metoda. POST metoda se također vrlo često koristi u praksi.

Ako smo, da bismo kontaktirali poslužitelj koristeći GET metodu, morali samo upisati zahtjev u URL, onda u POST metodi sve radi na drugom principu.

Za izvršenje ovog tipa zahtjeva potrebno je kliknuti na gumb s atributom type="submit" koji se nalazi na web stranici. Imajte na umu da se ovaj gumb nalazi u elementu , koji ima atribut metode postavljen na post.

Razmotrite ovaj HTML kod:

Unesite tekst:


Ako korisnik u tekstualno polje unese tekst i klikne na gumb “Pošalji”, tekstualna varijabla će biti poslana na poslužitelj s vrijednošću sadržaja koji je korisnik unio.

POST i GET zahtjevi jednostavnim riječima

Ova varijabla bit će poslana metodom POST.

Ako ovo napišete u obliku:

Tada će podaci biti poslani metodom GET.

Ako je u slučaju GET zahtjeva količina podataka koju smo mogli prenijeti bila ograničena duljinom adresne trake preglednika, tada u slučaju POST zahtjeva nema tog ograničenja i možemo prenijeti značajne količine informacija.

Još jedna razlika između POST metode i GET metode je ta što POST metoda skriva sve varijable koje prosljeđuje i njihove vrijednosti u svom tijelu (Entity-Body). U slučaju GET metode, oni su pohranjeni u nizu zahtjeva (Request-URI).

Evo primjera zahtjeva napravljenog metodom POST:

POST / HTTP/1.0\r\n
Domaćin: www.site.ru\r\n
Preporuka: http://www.site.ru/index.html\r\n
Kolačić: prihod=1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Dužina sadržaja: 35\r\n
\r\n
prijava=Dima&lozinka=12345

Dakle, prijenosom podataka POST metodom, napadaču će biti puno teže presresti ih jer skriveni su od izravnog pogleda pa se POST način prijenosa podataka smatra sigurnijim načinom.

Osim toga, koristeći POST metodu možete prenijeti ne samo tekst, već i multimedijske podatke (slike, audio, video). Postoji poseban parametar Content-Type koji određuje vrstu informacija koje je potrebno prenijeti.

I na kraju, da bi se podaci koji su poslani ovom metodom primili na poslužitelj, koristi se POST varijabla.

Evo primjera obrade u PHP-u:

echo $_POST['tekst'];
?>

U prošlom postu odlučili smo da preglednik (klijent) šalje HTTP zahtjeve poslužitelju, a poslužitelj šalje HTTP odgovore klijentu. Ovi zahtjevi i odgovori oblikovani su prema određenim pravilima. Postoji nešto poput sintakse, kako i kojim redoslijedom treba pisati. Mora postojati strogo definirana struktura.

Pogledajmo pobliže ovu strukturu po kojoj su zahtjevi i odgovori izgrađeni u HTTP protokolu.

HTTP zahtjev sastoji se od tri glavna dijela, koji se pojavljuju dolje navedenim redoslijedom. Između zaglavlja i tijela poruke nalazi se prazan redak (kao separator), koji predstavlja znak za novi redak.

Prazan niz (razdjelnik)

Post and Get requests, koja je razlika između njih i koji je bolji i za koje namjene?

tijelo poruke (Entity Body) – izborni parametar

Niz upita– navodi način prijenosa, URL kojem se pristupa i verziju HTTP protokola.

Naslovi– opisuju tijelo poruka, prenose različite parametre i druge podatke i informacije.

tijelo poruke- to su sami podaci koji se prenose u zahtjevu. Tijelo poruke je izborni parametar i može nedostajati.

Kada primimo zahtjev za odgovor od poslužitelja, tijelo poruke je najčešće sadržaj web stranice. No, prilikom postavljanja zahtjeva prema poslužitelju, također ponekad može biti prisutan, na primjer, kada podatke koje smo ispunili u obrascu za povratne informacije prenosimo na poslužitelj.

Detaljnije ćemo razmotriti svaki element zahtjeva u sljedećim bilješkama.

Uzmimo, na primjer, jedan pravi zahtjev poslužitelju. Svaki dio zahtjeva sam označio različitom bojom: linija zahtjeva je zelena, zaglavlja su narančasta, a tijelo poruke plavo.

Zahtjev preglednika:

Domaćin: webgyry.info

Kolačić: wp-postavke

Veza: Keep-alive

U sljedećem primjeru tijelo poruke već postoji.

Odgovor poslužitelja:

Vrsta sadržaja: tekst/html; skup znakova=UTF-8

Transfer-Encoding: chunked

Veza: Keep-alive

Keep-Alive: timeout=5

X-Pingback: //webgyry.info/xmlrpc.php

Neimenovani dokument

To su poruke koje se razmjenjuju između klijenta i poslužitelja putem HTTP-a.

Usput, želite li saznati ima li smisla neki element na vašoj web stranici koristeći "ciljeve" Yandex Metrics i Google Analytics?

Uklonite ono što ne radi, dodajte ono što radi i udvostručite prihod.

Tečaj o postavljanju ciljeva Yandex Metrice..

Tečaj o postavljanju Google Analytics ciljeva..

HTTP klijent šalje zahtjev poslužitelju u obliku poruke zahtjeva, koja ima sljedeći format:

  • Niz upita (obavezno)
  • Naslov (neobavezni element)
  • Prazan niz (obavezno)
  • Tijelo poruke (neobavezni element)

Pogledajmo svaki od ovih elemenata zasebno.

Niz upita

Redak zahtjeva počinje tokenom metode, nakon čega slijedi URI zahtjeva i verzija protokola. Elementi su međusobno odvojeni razmacima:

Pogledajmo ovaj element detaljnije.

Metoda zahtjeva

Ovaj element specificira metodu koja bi se trebala pozvati na strani poslužitelja na navedenom URI-ju.

Postoji osam metoda u HTTP-u:

  • GLAVA
    Koristi se za dobivanje statusa i niza zaglavlja s poslužitelja prema URI-ju. Ne mijenja podatke.
  • DOBITI
    Koristi se za primanje podataka s poslužitelja na navedenom URI-ju. Ne mijenja podatke.
  • POST
    Koristi se za slanje podataka na poslužitelj (kao što su informacije o razvojnom programeru itd.) pomoću HTML obrazaca.
  • STAVITI
    Zamjenjuje sve prethodne podatke na resursu novim učitanim podacima.
  • IZBRISATI
    Briše sve trenutne podatke o resursu određenom URI-jem.
  • SPOJITI
    Uspostavlja tunelsku vezu s poslužiteljem na navedenom URI-ju.
  • OPCIJE
    Opisuje svojstva veze za navedeni resurs.
  • TRAG
    Pruža poruku koja sadrži povratni trag lokacije resursa navedenog u URI-ju.

URI zahtjeva

URI (Uniform Resource Identifier) ​​​​je identifikator resursa na koji se šalje zahtjev. Sljedeći je najčešće korišteni URI format:

‘*’ koristi se kada se HTTP zahtjev ne odnosi na određeni resurs, već na poslužitelj. Koristi se samo kada se metoda ne mora primijeniti na resurs. Na primjer,

apsolutniURI koristi se kada se HTTP zahtjev postavi na proxy. Od proxyja se traži da proslijedi zahtjev iz dostupne predmemorije i vraća odgovor. Na primjer:

apsolutni_put | izvor najčešće korišteni.

Učenje rada s GET i POST zahtjevima

Zahtijeva se određeni resurs na određenom poslužitelju. Na primjer, klijent želi primiti resurs od poslužitelja preko porta 80. Adresa resursa je “www.proselyte.net” i šalje sljedeći zahtjev:

Polja zaglavlja upita

Polja zaglavlja omogućuju klijentu da poslužitelju proslijedi dodatne informacije o zahtjevu i sebi. Ova polja djeluju kao modifikatori upita.

Ispod je popis najvažnijih polja zaglavlja koja se mogu koristiti:

  • Prihvati skup znakova
  • Prihvati-Kodiranje
  • Prihvati-Jezik
  • Autorizacija
  • Očekivati
  • Ako-podudaranje
  • Ako-Modificirano-Od
  • Ako-nema-podudaranja
  • Ako-raspon
  • Ako-Nemodificirano-Od
  • Raspon
  • Preporuka
  • Korisnički agent

Ako želimo implementirati vlastiti klijent i vlastiti web poslužitelj, tada možemo kreirati vlastita polja zaglavlja.

Primjer HTTP zahtjeva

Ovo zaključuje našu studiju HTTP zahtjeva.
U sljedećem članku ćemo pogledati HTTP odgovore.

Jedan od načina na koji možete poslati HTTP zahtjev poslužitelju je metoda GET. Ova metoda je najčešća i zahtjevi prema poslužitelju najčešće se javljaju pomoću nje.

Najlakši način za izradu GET zahtjeva je da upišete URL u adresnu traku svog preglednika.

Preglednik će poslužitelju poslati otprilike sljedeće informacije:

GET / HTTP/1.1
Domaćin: webgyry.info
Korisnički agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
Prihvati: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Jezik prihvaćanja: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Kolačić: wp-postavke
Veza: Keep-alive

Zahtjev se sastoji iz dva dijela:

1. Linija zahtjeva

2. Zaglavlja poruka

Imajte na umu da GET zahtjev nema tijelo poruke. Ali to ne znači da uz njegovu pomoć ne možemo prenijeti nikakve informacije na poslužitelj.

Razlika između GET i POST metoda

To se može učiniti pomoću posebnih GET parametara.

Da biste zahtjevu dodali GET parametre, trebate dodati “?” na kraju URL-a. a nakon toga ih počnite pitati prema sljedećem pravilu:

naziv_parametra1=vrijednost_parametra1& naziv_parametra2=vrijednost_parametra2&…

Razdjelnik između parametara je znak “&”.

Na primjer, ako želimo prenijeti dvije vrijednosti na poslužitelj, korisničko ime i njegovu dob, to se može učiniti pomoću sljedećeg retka:

http://site.ru/page.php?name=dima&age=27

Kada se ovaj zahtjev izvrši, podaci završavaju u takozvanoj varijabli okoline QUERY_STRING, iz koje se mogu dohvatiti na poslužitelju pomoću web programskog jezika na strani poslužitelja.

Evo primjera kako se to može učiniti u PHP-u.

echo "Vaše ime: " . $_GET["ime"] . "
»;
echo "Vaše godine: " . $_GET["dob"] . "
»;
?>

Konstrukcija $_GET[“parameter_name”] omogućuje prikaz vrijednosti proslijeđenog parametra.

Kao rezultat izvršavanja ovog koda u pregledniku, prikazat će se sljedeće:

Vaše ime: dima
Vaše godine: 27

Također postavljamo zahtjev poslužitelju koristeći GET metodu.

Najbolji članci na temu