Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • vijesti
  • HTTP GET, POST i PUT zahtjevi. Učenje rada sa GET i POST zahtjevima

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

Korištenje metoda GET i POST u PHP-u je teško precijeniti, jer se ove metode nalaze na gotovo svim stranicama. Prije proučavanja materijala opisanog u nastavku, savjetujem vam da se upoznate s html oznakom

... Pogledajmo svaku od ovih metoda detaljno.

GET metoda

Metoda GET koristi URL niz za prosljeđivanje podataka. Možda ste primijetili dugačke i nejasne URL-ove. Na primjer: function.php?login = Alex & email = dezyakin... U ovom slučaju, podaci se obrađuju u function.php. Iza upitnika "?" nalazi se nabrajanje prenesenih parametara (parametar je odvojen znakom "&") sa vrijednostima: parametru za prijavu je dodijeljena Alex vrijednost, a varijabla e-pošte je dezyakin. Podaci će biti pohranjeni u $_GET superglobalnom nizu. Primjer korištenja GET metode je predstavljen u nastavku:

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

Obratite pažnju na to kako čitamo vrijednosti iz superglobalnog niza $_GET: $ _GET ["ime_varijable"]... U našem primjeru, imena varijabli su deklarirana u obliku (ime = prijava i ime = email).

Savjet:
Prije obrade primljenih vrijednosti, savjetujem vam da provjerite njihovo postojanje kroz funkcije isset (ime_varijable) ili prazno (ime_varijable)- ove funkcije su obrađene u prethodnoj lekciji 2: varijable u PHP-u. Na primjer:

provjeravanje postojanja sa issetom: ako je postavljeno ($ _GET ["login"]) ( operatori za rukovanje prijavom ... } //ili provjerite postojanje koristeći prazno: ako je prazno ($ _GET ["e-pošta"]) ( operateri za obradu e-pošte ... } ?>

U obrascu možete odrediti ime datoteke koja će obraditi proslijeđene vrijednosti. Ovo se radi pomoću atributa radnje obrasca, kojem se može dodijeliti adresa ove datoteke. Po defaultu, ova datoteka je dodijeljena trenutnoj datoteci (tj. obrađuje se u datoteci u kojoj se nalazi obrazac). Evo primjera u kojem se podaci iz obrasca šalju na obradu u datoteku srcipt.php:

Ulogovati se: Email:

Datoteka script.php mora sadržavati neku vrstu rukovaoca informacijama, inače će informacije biti proslijeđene u prazno.

GET metoda ima mnoge nedostatke:

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

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

POST metoda

POST metoda se razlikuje od GET po tome što se podaci prenose u zatvorenom obliku. Postoji superglobalni niz $_POST iz kojeg možete čitati podatke ovako: $ _POST ["ime_varijable"]... Na primjer:

Ulogovati se: "> E-mail: ">
Koristeći superglobalni niz $_POST, odštampajte prihvaćene vrijednosti:* / echo "
login = ". $ _POST [" login "]; echo"
email = ". $ _POST [" email "];?>

Rezultat izvršavanja gore opisanog koda prikazan je na slici ispod:

Kao što vidite, URL nema postscript, ali su podaci ipak primljeni i prikazani.

Bilješka:
1) Volumen vrijednosti koje se prenose metodom POST je ograničen prema zadanim postavkama i iznosi 8 MB. Da biste povećali ovu vrijednost, trebate promijeniti direktivu post_max_size u php.ini.

2) U ranijim verzijama PHP-a, umjesto kratkih imena superglobalnih nizova $ _GET i $ _POST, korištena su duža imena: $ HTTP_GET_VARS i $ HTTP_POST_VARS. One su podrazumevano onemogućene u php 5, ali ih možete omogućiti u konfiguracionoj datoteci php.ini koristeći parametar register_long_arrays. U php 6 ova duga imena neće biti dostupna.

3) Prije obrade varijabli iz $_POST-a, savjetujem vam da provjerite prisustvo varijabli, baš kao što je to urađeno sa GET metodom.

Kreiranje Internet standarda Web 2.0 omogućilo je korisniku ne samo primanje informacija, već i aktivnu interakciju sa drugim korisnicima i internet uslugama. Da bi se organizovala ova povratna informacija, u HTML jezik su uvedene dodatne oznake za slanje traženih informacija serveru. Na primjer, to može biti obrazac za registraciju, ili obrazac za dodavanje komentara, ili postavljanje ličnog naloga (stranica na društvenoj mreži) itd. U ovom poglavlju razmotrićemo skup oznaka koje vam omogućavaju da organizujete interakciju korisnika sa sajtom.

6.1. GET i POST zahtjevi

Da bi organizovao interakciju korisnika sa Internetom, programer sajta mora da obezbedi prenos zahteva sa korisnika sajta na server na kojem se nalazi ova stranica. Postoje dvije vrste zahtjeva: GET i POST zahtjevi.

GET-zahtjevi

U ranim danima interneta postojali su samo GET zahtjevi. Oni predstavljaju prenos podataka direktno u adresnoj traci pretraživača, sa sledećom sintaksom:

http: // domena / stranica? [parametar1 = vrijednost1] [& parametar2 = vrijednost2] ...

Ovdje skup podataka koji se prenosi na server počinje znakom '?' i odvojen je znakom '&'. Sami podaci su parovi

parametar = vrijednost

Na primjer, ako trebate proći ime i prezime korisnika na stranici za registraciju (na primjer, register.php) web stranice mysite.com, to će izgledati ovako:

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

Treba napomenuti da pretraživači zastarjelih verzija mogu pogrešno percipirati ćirilično pismo i prijenos ruskih slova će se izvršiti pogrešno. U GET zahtjevima je bolje prenijeti samo servisne informacije u obliku brojeva i riječi na latinici.

Nedostatak GET zahtjeva je ograničena količina prenesenih podataka. Na strani servera, string upita je ograničen na neku maksimalnu vrijednost. Na primjer, ako maksimalna veličina zahtjeva može biti 1024 karaktera, tada će sve što premašuje ovu vrijednost biti izbrisano i tada neke od prenesenih informacija neće biti obrađene na navedenoj stranici stranice. Drugo značajno ograničenje je mogućnost prijenosa strogo definiranih skupova znakova. Na primjer, likovi? i & su već rezervirani i ne mogu se proslijediti kao vrijednosti parametara. Međutim, ovo pravilo se može zaobići tako što se u nizu upita prosljeđuje ne sam znak, već njegova vrijednost koda. Da biste to učinili, koristite znak '%' iza kojeg slijedi kod karaktera, na sljedeći način:

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

Ovdje su vrijednosti koda specificirane u heksadecimalu kako bi se sačuvala dužina upita.

Uprkos ovim nedostacima, bilo bi izuzetno teško kreirati sajtove bez GET zahteva. Na primjer, oni su neophodni u slučajevima početne inicijalizacije stranice web-mjesta za određenog korisnika, kada zahtjev ukazuje ne samo na web-mjesto i trenutnu stranicu, već i na njen ID, kao što se radi na društvenoj mreži Vkontakte:

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

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

POŠTA-zahtjevi

Da bi se riješili navedeni nedostaci GET zahtjeva, dodani su POST zahtjevi koji omogućavaju prijenos velikih količina podataka u binarnom obliku, tj. bez izobličenja i promjena u prenesenim podacima. Takvi zahtjevi su dobri za postavljanje datoteka i slika na server. 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 razmotreno 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 pretpostaviti da govorimo o fajlu index.php Ali malo ljudi zna šta dolazi iza upitnika. Prilično je jednostavno: ? blog = 2 ovo je deklaracija globalne varijable "$ _GET [" blog "]" sa vrijednošću "2". Stoga skripti prosljeđujem varijablu koja je odgovorna za prikaz informacija iz baze podataka. Hajde da napišemo malu skriptu u kojoj ćete sve jasno vidjeti:

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

Koristimo naredbu uvjeta if () kao uvjet je sljedeći red:

Isset ($ _ GET ["blog"])

isset () vam omogućava da saznate postoji li varijabla koja je navedena u zagradama, odnosno uvjet koji sam opisao u kodu zvuči ovako: Ako postoji varijabla $ _GET ["blog"], tada prikažite sadržaj ovu varijablu na ekranu. Evo šta se dogodilo:

Mislim da je jasno. Kreira se globalna varijabla $ _GET sa identifikatorom koji smo deklarirali u adresnoj traci ( u ovom slučaju sa identifikatorom "blog")

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

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

Evo izlaznog koda:

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

Uslov ide ovako:

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

Forms

Prije nego što stignemo pošta upita, morate razumjeti koji su oblici? Zašto je to potrebno? Zato što je globalna varijabla $ _POST [""] kreirana kroz forme. Šta je obrazac? Ovo su polja za unos neke vrste informacija od strane korisnika. Polja su u jednom redu, velika polja, tu su i radio dugmad, potvrdni okviri. Hajde da sredimo sve po redu...

Forma je oznaka:


elementi forme

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

Kreirajmo formu:


elementi forme

Kao fajl za rukovanje, stavio sam fajl test.php jer u njemu pišem primjere za vas. Ja sam podesio način slanja postova jer se ove metode koriste u 99,9% slučajeva. Našoj formi sam dao i ime – forma

Sada zaronimo u svijet elemenata forme. Prva stvar koju trebate razumjeti je da su skoro svi elementi oznake. jedina razlika je u atributu tip kod ovih oznaka. Dozvolite mi da navedem korištene elemente obrasca:

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

Hajde sada da sastavimo kratak upitnik za obuku sa kojim ćemo dalje raditi. Naš zadatak je da sastavimo mali upitnik koji će nam reći ime osobe koja je ispunila, spol, iz koje je zemlje, njegovu omiljenu boju i tekstualno polje u koje korisnik može dodati nešto o sebi. To sam uradio:

Vaše prezime Ime Patronim:

Vaš spol:
M
F

iz koje ste zemlje



Omiljena boja (e):

crna:
crveno:
bijela:
drugo:

O sebi:




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

Sada ako pokrenemo ovaj kod u pretraživaču, vidjet ćemo sljedeće:

Koristio sam atribut za obrazac akcija sa značenjem test.php to znači, kao što sam rekao, podaci iz obrasca će biti proslijeđeni test.php fajlu.

POST zahtjev

Hajde sada da napišemo php kod koji će nam omogućiti da vidimo informacije koje smo uneli. Gdje se pohranjuju podaci? U slučaju zahtjeva za dobivanje, naši podaci su pohranjeni u globalnoj varijabli $ _GET [""]. Kada se napravi zahtjev za objavljivanje, podaci će biti u globalnoj varijabli $ _POST [""]. U uglastim zagradama morate napisati identifikator, kao u slučaju globalne varijable get. Pitanje je gdje mogu dobiti ovaj identifikator? Zato nam je potreban atribut name na elementima forme! Upravo ta imena služe kao ključ za nas u postu globalnog niza. Pa, počnimo s opisom skripte:

if (isset ($ _ POST ["submit"])) (
echo "Ime:". $ _ POST ["fio"]. "
";
echo "Sex:". $ _ POST ["sex"]. "
";
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 meni:". $ _ POST ["o"]. "


";
}
?>

Uslov if koji smo napisali kaže: Ako postoji globalna varijabla $ _POST ["submit"], tada prikazujemo podatke na ekranu. Ova globalna varijabla se kreira ako kliknemo na dugme za slanje, zbog čega nam je u ovom primeru potreban atribut name u dugmetu. Možda se pitate zašto je atribut name opcionalan za dugme? Prilično je jednostavno. Obično programator ne prati pritisak na dugme, već prati poslate podatke. Za ispravan rad, na primjer, obrazaca za kontakt, potrebno je pratiti ne pritisak na dugme, već ispravnost unesenih podataka i saznati jesu li ti podaci uopće uneseni. U našem primjeru nismo provjeravali poslate podatke, već smo jednostavno pratili klik na dugme, da pojednostavimo primjer... Evo što smo dobili:

Zaključak

Pa, danas smo analizirali dvije metode prijenosa podataka između skripti, kao i galopom se upoznali sa formama. Zaista se nadam da će vam ova informacija barem negdje biti od koristi. Ako imate pitanja ili razmišljanja, napišite komentare. Srećno, imam sve za danas!

PS: Da li želite da kompjuterske igrice postanu još realističnije? Directx 11 za Windows 7 možete besplatno preuzeti na Windows u! Uživajte u sjajnoj grafici!

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

U ovom članku želim da vam kažem šta su HTTP metode GET / POST / PUT / DELETE i druge, za šta su izmišljene i kako ih koristiti u skladu sa REST.

HTTP

Dakle, šta je tačno jedan od glavnih protokola Interneta? Pedante ću poslati na RFC2616, a ostalo ću reći kao čovjek :)

Ovaj protokol opisuje komunikaciju između dva računara (klijent i server), na osnovu poruka koje se zovu Zahtjev i Odgovor. Svaka poruka se sastoji od tri dijela: početne linije, zaglavlja i tijela. U ovom slučaju potrebna je samo startna linija.

Početne linije za zahtjev i odgovor imaju drugačiji format - zanima nas samo početna linija zahtjeva, koja izgleda ovako:

METHOD URI HTTP / VERSION ,

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

Zaglavlja su zbirka parova ime-vrijednost, odvojenih dvotočkama. U zaglavljima se prenose različite informacije o servisu: kodiranje poruke, naziv i verzija pretraživača, adresa sa koje je došao klijent (Referrer) i tako dalje.

Tijelo poruke su, u stvari, preneseni podaci. U odgovoru, preneseni podaci, u pravilu, je html stranica koju je tražio pretraživač, a u zahtjevu, na primjer, u tijelu poruke, prenosi se sadržaj datoteka koje su učitane na server. Ali po pravilu, tijelo poruke uopće nije uključeno u zahtjev.

Primjer HTTP komunikacije

Pogledajmo primjer.

upit:
GET /index.php HTTP / 1.1 Host: example.com Korisnički agent: Mozilla / 5.0 (X11; U; Linux i686; ru; rv: 1.9b5) Gecko / 2008050509 Firefox / 3.0b5 Prihvati: tekst / html Veza: zatvori
Prvi red je red zahtjeva, ostali 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 Content-Length: 1234 Veza: zatvori ... SAMA HTML STRANICA ...

Resursi i metode

Vratimo se na početni niz upita i zapamtite da sadrži parametar kao što je URI. Ovo je skraćenica od Uniform Resource Identifier - uniformni identifikator resursa. Resurs je, u pravilu, datoteka na serveru (primjer URI u ovom slučaju je "/styles.css"), ali općenito, resurs može biti apstraktni objekt ("/ blogs / webdev /" - označava blok "Web development", a ne za određenu datoteku).

HTTP tip zahtjeva (koji se naziva i HTTP metoda) govori serveru koju radnju želimo poduzeti s resursom. U početku (ranih 90-ih) pretpostavljalo se da klijent može samo jedno željeti od resursa - da ga dobije, ali sada, koristeći HTTP protokol, možete kreirati postove, uređivati ​​profil, brisati poruke i još mnogo toga. A ove radnje je teško kombinovati sa pojmom „primanje“.

Za razlikovanje akcija s resursima na nivou HTTP metoda, izmišljene su sljedeće opcije:

  • GET - dobijanje resursa
  • POST - kreiranje resursa
  • PUT - ažuriranje resursa
  • DELETE - brisanje resursa
Obratite pažnju na činjenicu da HTTP specifikacija ne obavezuje server da razumije sve metode (kojih je u stvari mnogo više od 4) - potreban je samo GET, a također ne govori serveru šta treba da radi kada primi zahtjev sa određenom metodom. To znači da server odgovara na DELETE /index.php HTTP / 1.1 zahtjev nije u obavezi obrišite stranicu index.php na serveru, baš kao na GET /index.php HTTP / 1.1 zahtjevu nije u obavezi vrati vam stranicu index.php, može je obrisati kao :)

ODMOR dolazi u igru

REST (REpresentational State Transfer) - ovaj termin je 2000. godine skovao Roy Fielding - jedan od programera HTTP protokola - kao naziv za grupu principa za izgradnju web aplikacija. Generalno, REST pokriva šire područje od HTTP-a - može se koristiti na drugim mrežama s drugim protokolima. REST opisuje principe interakcije klijent-server, zasnovane na konceptima "resurs" i "glagol" (možete ih shvatiti kao subjekt i predikat). U slučaju HTTP-a, resurs je definiran njegovim URI-jem, a glagol je HTTP metoda.

REST predlaže da se odustane od upotrebe istog URI-ja za različite resurse (to jest, adrese dva različita članka kao što su /index.php?article_id=10 i /index.php?article_id=20 nisu REST-način) i koriste različite HTTP metode za različite akcije. Odnosno, web aplikacija napisana korištenjem REST pristupa će izbrisati resurs kada mu pristupi metodom HTTP DELETE (naravno, to ne znači da biste trebali moći izbrisati sve i svašta, 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 ikada prije. Koristeći REST, URI za dodavanje novog korisnika neće biti /user.php?action=create (GET / POST metoda), već jednostavno /user.php (strogo POST metoda).

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

Problemi?

Da, postoji mali problem sa primjenom REST-a u praksi. Ovaj problem se zove HTML.

PUT/DELETE zahtjevi se mogu slati putem XMLHttpRequest-a, tako da se "ručno" kontaktira server (recimo, preko curl-a ili čak preko telneta), ali ne možete napraviti HTML obrazac koji šalje puni PUT/DELETE zahtjev.

Poenta je da vam HTML specifikacija ne dozvoljava kreiranje obrazaca koji šalju podatke osim putem GET-a ili POST-a. Stoga, za normalan rad s drugim metodama, morate ih umjetno oponašati. Na primjer, u Rack-u (mehanizam kojim Ruby komunicira s web serverom; Rails, Merb i drugi Ruby okviri su napravljeni pomoću Rack-a), možete dodati skriveno polje pod nazivom "_method" u obrazac i navesti ime metoda kao vrijednost (na primjer, "PUT") - u ovom slučaju, POST zahtjev će biti poslan, ali Rack će se moći pretvarati da je primio PUT, a ne POST.

Ovaj post je namijenjen da objasni principe prijenosa podataka na Internetu korištenjem dvije glavne metode: GET i POST. Napisao sam ga kao dodatak uputstvu za generator smjenskog rada za one koje malo zanimaju detalji ☺.

Idite na sledeću adresu (ovo je za vizuelno objašnjenje): http://calendarin.net/calendar.php?year=2016 Obratite pažnju na adresnu traku pretraživača: calendarin.net/calendar.php ? godina = 2016 Glavna datoteka je imenovana, praćena znakom pitanja (?) i parametrom "year" sa vrijednošću "2016". Dakle, sve što slijedi iza znaka pitanja je GET zahtjev. To je jednostavno. Da biste proslijedili više od jednog parametra, ali nekoliko, onda ih treba razdvojiti znakom &. Primjer: calendarin.net/calendar.php • godina = 2016 i prikaz = radni dani i slobodni dani

Glavna datoteka je i dalje imenovana, praćena upitnikom (?), zatim - parametar "year" sa vrijednošću "2016", zatim - ampersand (&), zatim - parametar "display" sa vrijednošću "work -dani-i-dani -slobodni".

GET parametri se mogu mijenjati direktno u adresnoj traci pretraživača. Na primjer, promjenom vrijednosti "2016" u "2017" i pritiskom na tipku idete na kalendar za 2017. godinu.

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

Ako imate bilo kakvih pitanja, komentara i moj e-mail na usluzi.

Pored 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 nam je za pristup serveru metodom GET bilo dovoljno da ukucamo zahtjev u URL, onda u POST metodi sve radi po drugom principu.

Da bismo ispunili ovakvu vrstu zahtjeva potrebno je da kliknemo na dugme sa atributom type = "submit" koje se nalazi na web stranici. Imajte na umu da se ovo dugme nalazi u elementu sa atributom metode postavljenim na post.

Uzmite u obzir ovaj HTML:

Unesite tekst:


Ako korisnik unese bilo koji tekst u tekstualno polje i klikne na dugme "Pošalji", tada će se serveru poslati tekstualna varijabla sa vrijednošću sadržaja koju je unio korisnik.

POST i GET zahtjeve na jednostavan način

Ova varijabla će biti poslana metodom POST.

Ako pišete u formi ovako:

Tada će se podaci poslati metodom GET.

Ako je, u slučaju GET zahtjeva, količina podataka koju smo mogli prenijeti bila ograničena dužinom adresne trake pretraživača, 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, POST metoda skriva sve varijable koje su joj proslijeđene i njihove vrijednosti u svom tijelu (Entity-Body). U slučaju GET metode, oni su pohranjeni u stringu zahtjeva (Request-URI).

Evo primjera POST zahtjeva:

POST / HTTP / 1.0 \ r \ n
Host: www.site.ru \ r \ n
Referent: 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
login = Dima & lozinka = 12345

Dakle, prenošenjem podataka metodom POST, napadaču će biti mnogo teže da ih presretne, jer oni su skriveni od pogleda, pa se POST metoda smatra sigurnijom.

Osim toga, POST metoda može prenijeti ne samo tekst, već i multimedijalne podatke (slike, audio, video). Postoji poseban parametar Content-Type koji određuje vrstu informacija koje treba prenijeti.

Konačno, varijabla POST se koristi za dohvaćanje podataka prenesenih ovom metodom na server.

Evo primjera obrade u PHP-u:

echo $ _POST ['tekst'];
?>

U prošlom postu smo odlučili da pretraživač (klijent) šalje HTTP zahteve serveru, a server klijentu šalje HTTP odgovore. Ovi zahtjevi i odgovori se obrađuju prema određenim pravilima. Postoji nešto poput sintakse, kako i kojim redosledom treba pisati. Mora postojati dobro definisana struktura.

Pogledajmo pobliže ovu strukturu, koja se koristi za izgradnju zahtjeva i odgovora u HTTP protokolu.

HTTP zahtjev se sastoji od tri glavna dijela, koji dolaze tačno dolje prikazanim redoslijedom. Između zaglavlja i tijela poruke postoji prazan red (kao separator), to je znak za povlačenje reda.

Prazan niz (separator)

Objavi i dobij zahtjeve, koja je razlika između njih i koji je bolji i za koje svrhe?

tijelo poruke (Tijelo entiteta) - opcijski parametar

string upita- specificira način prijenosa, URL za pristup i verziju HTTP protokola.

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

tijelo poruke- ovo su sami podaci, koji se prenose u zahtjevu. Tijelo poruke je opciono i može se izostaviti.

Kada primimo zahtjev za odgovor od servera, tijelo poruke najčešće je sadržaj web stranice. Ali, prilikom upućivanja zahtjeva serveru, to ponekad može biti i prisutno, na primjer, kada podatke koje smo popunili u formularu za povratne informacije prenesemo na server.

Detaljnije, svaki element zahtjeva ćemo razmotriti u sljedećim napomenama.

Uzmimo jedan pravi serverski zahtjev kao primjer. Svaki dio zahtjeva sam označio svojom bojom: linija zahtjeva je zelena, zaglavlja su narandžasta, tijelo poruke je plavo.

Zahtjev iz pretraživača:

Domaćin: webgyry.info

Kolačić: wp-settings

Veza: održavaj-živ

U sljedećem primjeru tijelo poruke je već prisutno.

Odgovor servera:

Content-Type: text / html; skup znakova = UTF-8

Transfer-Encoding: chunked

Veza: održavaj-živ

Keep-Alive: timeout = 5

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

Dokument bez naslova

Ovo su poruke koje se razmenjuju između klijenta i servera preko HTTP protokola.

Usput, želite li znati ima li smisla u nekom elementu na vašoj web stranici koristeći "ciljeve" Yandex Metrics i Google Analytics?

Oduzmite ono što NE radi, dodajte ono što radi i udvostručite svoj rezultat.

Kurs o postavljanju Yandex Metrica ciljeva ..

Kurs o postavljanju ciljeva Google Analytics..

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

  • Niz zahtjeva (obavezno)
  • Naslov (opcijski element)
  • Prazan niz (obavezno)
  • Tijelo poruke (opcionalno)

Pogledajmo svaki od ovih elemenata posebno.

string upita

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

Razmotrimo ovaj element detaljnije.

Metoda zahtjeva

Ovaj element specificira metodu koja će biti pozvana na strani servera na specificiranom URI-ju.

Postoji osam metoda u HTTP-u:

  • HEAD
    Koristi se za dobijanje statusne linije i naslova sa servera prema URI-ju. Ne mijenja podatke.
  • GET
    Koristi se za primanje podataka sa servera na navedeni URI. Ne mijenja podatke.
  • POŠTA
    Koristi se za slanje podataka na server (kao što su informacije o programeru, itd.) pomoću HTML obrazaca.
  • STAVITI
    Zamjenjuje sve prethodne podatke na resursu s novoučitanim podacima.
  • IZBRIŠI
    Uklanja sve trenutne podatke na resursu koji je specificirao URI.
  • CONNECT
    Uspostavlja tunelsku vezu sa serverom na navedenom URI-ju.
  • OPCIJE
    Opisuje svojstva veze za navedeni resurs.
  • TRACE
    Pruža poruku koja sadrži povratni trag lokacije navedenog URI-ja resursa.

Zahtjev za URI

URI (Uniform Resource Identifier) ​​je identifikator resursa na koji se šalje zahtjev. Najčešći URI format je prikazan u nastavku:

‘*’ koristi se kada HTTP zahtjev nije specifičan za određeni resurs, već za server. Koristi se samo kada se metoda ne mora primijeniti na resurs. Na primjer,

apsolutni uri koristi se kada se HTTP zahtjev šalje proxyju. Od proxyja se traži da proslijedi zahtjev iz dostupne keš memorije i vraća odgovor. Na primjer:

asbolutny_path | izvor koristi većina chatso.

Učenje rada sa GET i POST zahtjevima

Zahtijeva se određeni resurs određenog servera. Na primjer, klijent želi da dobije resurs od servera preko porta 80. Adresa izvora je “www.proselyte.net” i šalje sljedeći zahtjev:

Traženje polja zaglavlja

Polja zaglavlja omogućavaju klijentu da prosledi dodatne informacije o zahtevu i o sebi serveru. Ova polja djeluju kao modifikatori zahtjeva.

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

  • Prihvati-Charset
  • Accept-Encoding
  • Accept-Language
  • Autorizacija
  • Očekujte
  • Ako-Match
  • Ako-Modificirano-Od
  • Ako-Nema-Match
  • If-Range
  • Ako-Neizmijenjeno-Od
  • Domet
  • Referer
  • Korisnički agent

Ako želimo implementirati vlastiti klijent i vlastiti web server, onda možemo kreirati vlastita polja zaglavlja.

Primjer HTTP zahtjeva

Ovo završava naše istraživanje HTTP zahtjeva.
U sljedećem članku ćemo pogledati HTTP odgovore.

Jedan od načina na koji možete poslati HTTP zahtjev serveru je GET zahtjev. Ova metoda je najčešća i najčešće se njome upućuju zahtjevi prema serveru.

Najlakši način da kreirate GET zahtjev je da unesete URL u adresnu traku vašeg pretraživača.

Pretraživač će prenijeti sljedeće informacije na server:

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: tekst / html, aplikacija / xhtml + xml, aplikacija / xml; q = 0,9, * / *; q = 0,8
Prihvati-jezik: ru-RU, ru; q = 0,8, en-US; q = 0,5, en; q = 0,3
Accept-Encoding: gzip, deflate
Kolačić: wp-settings
Veza: održavaj-živ

Zahtjev se sastoji iz dva dijela:

1. linija zahtjeva

2.headers (Zaglavlja poruke)

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 server.

Razlika između GET i POST metoda

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

Da dodate GET parametre u zahtjev, trebate staviti znak "?" na kraj URL-a. a nakon toga počnite da ih pitate prema sljedećem pravilu:

parameter_name1 = parameter_value1 & parameter_name2 = parameter_value2 & ...

Razdjelnik između parametara je znak "&".

Na primjer, ako želimo da serveru prenesemo dvije vrijednosti, korisničko ime i njegovu dob, onda se to može učiniti pomoću sljedeće linije:

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

Kada se ovaj upit izvrši, podaci idu u takozvanu varijablu okruženja QUERY_STRING, iz koje se mogu preuzeti na serveru koristeći web programski jezik na strani servera.

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

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

$ _GET ["parameter_name"] konstrukcija vam omogućava da prikažete vrijednost proslijeđenog parametra.

Kao rezultat izvršavanja ovog koda u pretraživaču, bit će prikazano sljedeće:

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

takođe šaljemo zahtev serveru koristeći metodu GET.

Top srodni članci