Ceea ce este transmis cu cereri HTTP. Tipuri de solicitări și filosofie HTTP
Aceste și următoarele secțiuni vor fi descrise pe scurt cum să creați cele mai simple aplicații web utilizând PHP. Ceea ce a fost descris în secțiune nu este suficient de suficient pentru aplicarea dvs. pentru a comunica cu utilizatorul și formată în funcție de acțiunile efectuate sau parametrii introdusi. Și ceea ce lipsește? Nu există suficiente cunoștințe despre cum să organizați introducerea datelor utilizatorului și transferul acestor date pe server. Ei bine, cunoștințele de bază ale metodelor de procesare a software-ului primit pe informațiile despre server pe care ar trebui să le fi deja.
Http metode de solicitări și parametrii acestora
Orice aplicație web dinamică formează un răspuns la utilizator în conformitate cu parametrii introduși sau cu acțiunile efectuate pe partea clientului. Accesarea serverului este cel mai adesea redusă la două tipuri de interogări: utilizând metoda de obținere sau metodă post. Câteva cuvinte despre diferențele dintre aceste două tipuri de solicitări.
Obțineți metoda:Parametrii sunt transmise antetului interogării HTTP, astfel încât acestea pot fi văzute pe promptul de comandă, iar o astfel de solicitare poate fi salvată în marcaje. Deoarece lungimea totală a antetului este limitată, numărul și lungimea parametrilor transmise folosind GET este, de asemenea, limitată.
Se crede că rezultatele mai multor implementate într-un rând de aceleași cereri trebuie să fie singure și la fel.
Parametrii de solicitare sunt transmise în corpul interogării HTTP, deci nu sunt ele pe linia de comandă. Numărul și mărimea parametrilor sunt nelimitate.
Se crede că rezultatele mai multor cereri postlice identice pot returna diferite valori, deoarece pot schimba proprietățile obiectului țintă.
Metoda de obținere trebuie utilizată pentru a extrage conținutul resurselor de informații în conformitate cu parametrii atunci când nu este necesar să efectuați modificări ale structurii datelor privind resursele țintă, iar cererea (URL) are sens să salveze în marcaje. Metoda de execuție GET poate fi mai mare decât cerințele similare utilizând metoda postală.
Metoda poștală trebuie utilizată atunci când trebuie să vă ascundeți de parametrii transmisi ai adresei URL. Această metodă ar trebui, de asemenea, utilizată în interogări pentru a modifica conținutul resurselor țintă, transmiterea în parametrii (în corpul de interogare) descrierea acestor cele mai multe schimbări.
Calea spre resursă? Parameter1 \u003d Value1 & Parameter2 \u003d Valoare2 & ...
Dacă nu aveți un formular HTML special pentru a umple parametrii, atunci puteți depana aplicația PHP prin trecerea parametrilor de testare direct la linia de comandă a browserului, de exemplu:
Http: //syt/php-samples/sql.php? Sql \u003d Selectați * de la d_staff
Pentru a face apel la parametrii serverului, utilizați matrice globale $ _Get. și $ _Post. respectiv. Dacă aplicația dvs. utilizează încă ce metodă de a le contacta, ar trebui să utilizați o matrice $ _Request.care combină datele rețelei $ _get și $ _post, de exemplu, după cum urmează:
$ Sql \u200b\u200b\u003d izset ($ _ necesită ["sql"])? $ _Request ["sql"]: "";
În acest exemplu, programul determină dacă a fost transmis parametrul "SQL": dacă da, atunci acesta atribuie valoarea sa la variabila corespunzătoare și, dacă nu, atunci valoarea goală îi atribuie.
Determinarea parametrilor HTTP al interogării prin intermediul formei HTML
Desigur, nu este foarte convenabil să se determine parametrii manual direct în linia de comandă a browserului. Această metodă este potrivită pentru execuția software a cererilor HTTP la comunicarea aplicațiilor web unul cu celălalt. Pentru a introduce și a exercita datele inițiale de pe partea clientului, ar trebui să utilizați formulare HTML și. Mai jos este un exemplu de formă cea mai simplă, cu care este introdus parametrul de text (valoare), care este apoi transmis pe server ca parametru Post Metoda.
În atributul de metodă al elementului de formă, metoda specifică metoda de transmitere a datelor către server (obținerea sau postarea). Atributul de acțiune indică fișier PHP.care va procesa cererea. Dacă procesul trebuie să fie fișierul curent, atributul de acțiune nu este necesar. Pentru toate elementele a căror valoare trebuie transmisă ca parametru de interogare HTTP, determinați valoarea unică a atributului de nume. Este valoarea atributului nume. va fi index În ARRAYS $ _Get, $ _post sau $ _request (a se vedea exemplul de mai sus). Apăsând butonul trimite Trimite uniformă cu toate valorile introduse pe server.
Prima metodă de efectuare a cererii Post PHP este de a utiliza file_get_contents. A doua metodă va utiliza FREAD în combinație cu o pereche de alte funcții. Ambele opțiuni utilizează funcția Stream_Context_Create pentru a completa câmpurile de antet de interogare necesare.
Explicarea codului
Variabila $ SPD conține datele care trebuie transmise. Trebuie să aibă un format de șir de interogare HTTP, astfel încât unele caractere speciale trebuie să fie codificate.
Și în caracteristicile File_get_contents și în funcția FREAD avem doi parametri noi. Primul este Use_include_path. Din moment ce efectuăm cererea HTTP, în ambele exemple va fi falsă. Când utilizați valori adevărate pentru citirea unei resurse locale, funcția va căuta fișierul de la INGLEM_PATH.
Cel de-al doilea parametru este context, este umplut cu valoarea returnată a Stream_Context_Create, care ia valoarea unei matrice de $ AHTTP.
Utilizarea fișier_get_contents pentru a executa cereri poștale
Pentru a trimite o solicitare poștală la File_get_contents, trebuie să aplicați Stream_Context_create pentru a umple manual câmpurile antetului și pentru a specifica ce "ambalaj" va fi utilizat - în acest caz http:
$ Surl \u003d "http://brugbart.com/examples/http-post.php"; // URL Post $ SPD \u003d "Nume \u003d Jacob & Bench \u003d 150"; // postul de date $ AHTTP \u003d matrice ("http" \u003d\u003e // wrapper care va fi folosit array ("metoda" \u003d\u003e "post", // cerere de solicitare // antet de interogare "antet" \u003d\u003e "conținut - Tip: Aplicație / X-WWW-FORM-URLENCODED "," Conținut "\u003d\u003e $ SPD)); $ Context \u003d stream_context_create ($ AHTTP); $ conținut \u003d file_get_contents ($ surl, fals, € context); Echo conținut de $;
Utilizarea FRED pentru a executa cereri poștale
Puteți utiliza funcția Fread pentru a efectua solicitări postale. Următorul exemplu este Stream_Context_Create folosit pentru a compila antetele cererii HTTP necesare:
$ Surl \u003d "http://brugbart.com/examples/http-post.php"; // URL Post $ SPD \u003d "Nume \u003d Jacob & Bench \u003d 150"; // post $ AHTTP \u003d matrice ("http" \u003d\u003e // wrapper care va fi folosit array ("metoda" \u003d\u003e "post", // cerere de solicitare // "antet" \u003d\u003e "tip content: aplicație / X-WWW-FORM-URLENCODED "," Conținut "\u003d\u003e $ SPD)); $ Context \u003d stream_context_create ($ AHTTP); $ mâner \u003d fopen ($ surl, "r", fals, $ context); $ conținut \u003d ""; În timp ce (! Fero ($ mâner)) ($ conținut. \u003d FREAD (mâner $, 8192);) FLOSE ($ mâner); Echo conținut de $;
Efectuați cereri utilizând PHP
Acum vom acorda atenție utilizării FREAD și FILE_GET_CONTENTS pentru a descărca conținutul de pe Internet prin HTTP și HTTPS. Pentru a utiliza metodele descrise în acest articol, trebuie să activați opțiunea Fopen Wrappers. Pentru a face acest lucru, în fișierul php.ini trebuie să instalați parametrul Allow_url_fopen.
Pop și obțineți interogările PHP sunt utilizate pentru a vă conecta pe site-uri, primind conținutul unei pagini web sau pentru a verifica versiunile noi ale aplicațiilor. Vă vom spune cum să efectuați cereri simple HTTP.
Utilizarea FRED pentru a descărca sau a primi fișiere prin intermediul internetului
Amintiți-vă că citirea paginii web este limitată la partea disponibilă a pachetului. Deci, trebuie să utilizați funcția Stream_get_contents ( file_get_contents similar) sau în timp ce ciclul de citire a conținutului fragmentelor mai mici până la atingerea sfârșitului fișierului:
În acest caz, procesarea PHP PHP PHP este ultimul argument al funcției FREAD este egal cu dimensiunea fragmentului. Aceasta, de regulă, nu ar trebui să fie mai mare de 8192 ( 8*1024 ).
Acum, cele mai frecvent utilizate două metode HTTP: obțineți și postați. Dar sa dovedit că, chiar și printre acești doi dezvoltatori web "Pini", sunt reluați să piardă. Aceasta este o explicație: ambele metode pot fi folosite pentru a obține același rezultat. Dar trebuie amintit că utilizarea rapidă a oricăreia dintre metode poate duce la depozite, printre care încărcături mari pe canal și găuri de securitate.
Pentru a evita acest lucru suficient, este mai detaliat pentru a înțelege numirile și diferențele dintre aceste metode.
Dacă vă aflați în valoarea numelor metodelor, acesta va deveni deja mult mai clar. Obține (de la engleză pentru a primi), adică Ar trebui să fie aplicată solicitării de date. Post (C Engleză. Trimiteți prin poștă) - Aplicați pentru a trimite date către server. Se pare că totul este extrem de simplu și de înțeles. Dar cine dorește să dezvolte site-uri mai complicate de site-ul cardului de vizită cu o singură formă de feedback, este mai bine să cunoaștem întrebarea mai aproape.
Solicitări HTTP sigure și nesigure
Specificația HTTP 1.1 intră în două concepte: o cerere sigură și nesigură sau dacă este mai precisă, metodă.
Sigur - acestea sunt metode care pot solicita numai informații. Ele nu pot schimba resursa solicitată, nu pot duce la rezultate nedorite pentru utilizator, alte persoane sau server. Exemple sunt în siguranță Există o solicitare HTML a paginii web sau a imaginii. În siguranță, includeți cap și obțineți metode.
Nota
În realitate, meșteșugarii, desigur, pot dăuna și pot obține interogări. De exemplu, cererile de focalizare.
Cererile nesigure, așa cum au ghicit deja, pot duce potențial la consecințe rele dacă le reutilizează. Aceste solicitări pot schimba conținutul resursei la care fac apel. Exemple de astfel de solicitări: trimiterea de mesaje, înregistrare, plăți online. Insecure include metode postale, puse, ștergere.
Idempotent (idempotent) metode
Idmpotency - O proprietate a metodelor care, cu numeroase returorii, va returna același rezultat, cu excepția cazului în care informațiile sunt depășite. Aceasta înseamnă că atunci când accesează aceeași adresă URL, toți utilizatorii vor vedea una și cea mai mică pagină web, imagine, video etc. Această proprietate are, pune, șterge metode.
Și acum mai multe despre metodele de obținere și postare: faceți fiecare scurt "rezumat".
Obține.
- concepute pentru a primi date de pe server;
- corpul cererii este gol;
- procesat pe partea serverului mai rapid și mai mic consum de resurse de server datorită organismelor goale ale cererii;
- transmisia variabilelor apare în bara de adrese (aceasta vede, de asemenea, utilizatorul, datele tehnice se induldă în linia de interogare) și, prin urmare, informații despre variabile și valorile acestora (datele nu sunt protejate);
- este capabil să transfere o cantitate mică de date pe server: există limitări ale lungimii URL, care depinde de browser, de exemplu, IE6 \u003d 2KB. Acest lucru este recomandat să navigați pe dezvoltatori Yahoo!;
- poate transmite numai caractere ASCII;
- o astfel de solicitare poate fi copiată, salvată (de exemplu, în marcaje);
- cererea poate fi cache (aceasta poate fi controlată);
- pentru a reduce în continuare sarcina pe canal și serverul și cererile parțiale sunt disponibile;
- nu întrerupeți conexiunea HTTP (când este activată Beepalive pe server).
POST.
- concepute pentru a trimite date către server;
- transmisia de date are loc în corpul de interogare;
- prelucrarea pe partea laterală a serverului este mai lentă și "mai greu" decât obțineți, deoarece, în plus față de anteturi, trebuie să analizați corpul de interogare;
- capabil să transmită cantități mari de date;
- capabil să transfere fișiere;
- pagina generată de post nu poate fi salvată în marcajele;
- pauze conexiunea HTTP;
- pentru a transfera chiar și o cantitate foarte mică de informații, majoritatea browserelor trimit un minim de două pachete TCP: poziția și apoi corpul cererii.
Se pare că nu sunt atât de asemănătoare acestor două metode. Utilizarea unuia sau a altui ar trebui să se datoreze sarcinii, dar nu și faptul că obținerea este utilizată în mod implicit sau este mai ușor să lucrați cu acesta. Bineînțeles, în cele mai multe cazuri o opțiune mai buni, mai ales atunci când construiți Ajax rapid, dar nu uitați de deficiențele sale. Pentru mine, am făcut o notă simplă de algoritm cu privire la alegerea metodei.
Acest post este destinat să explice principiile transferului de date pe Internet cu ajutorul a două metode principale: obțineți și postați. Am scris-o ca un supliment la instrucțiunile generatorului de un program de lucru schimbător pentru cei care nu sunt interesanți pentru detalii ☺.
Mergeți la următoarea adresă (aceasta este pentru o explicație vizuală): http://calendarin.net/calendar.php?year\u003d2016 Vă rugăm să rețineți bara de adrese a browserului: Calendarin.net/calendar.php ? an \u003d 2016 Fișierul principal este numit, urmat de un semn de întrebare (?) Și parametrul "Anul" cu valoarea "2016". Deci, tot ce urmează un semn de întrebare, aceasta este o primire. Totul este simplu. Pentru a transmite un parametru, ci câteva, atunci trebuie să împartă ampersand (&). Exemplu: calendarina.net/calendar.php. ? an \u003d 2016 & afișaj \u003d zile de lucru-și-zile-off
Fișierul principal este, de asemenea, numit, urmat de un semn de întrebare (?), Apoi parametrul "Anul" cu valoarea "2016", apoi ampersand (&), apoi - parametrul "afișaj" cu "Zilele de lucru și - Parametrul de zi ".
Get-parametrii se pot schimba direct în bara de adrese a browserului. De exemplu, schimbarea valorii "2016" la "2017" și apăsând tasta, veți merge în calendar pentru 2017.
Această transmisie de date într-un mod ascuns (adresa paginii nu se schimbă); Adică, pentru a vedea ce a fost transmis, puteți folosi doar programul (script). De exemplu, în următorul instrument pentru calcularea caracterelor din text, datele inițiale sunt transmise prin metoda postală: http://usefalonlinetools.com/free/character-counter.php
Dacă aveți întrebări, comentarii și e-mail-ul meu sunt la dispoziția dumneavoastră.
În plus față de metoda de obținere, pe care am revizuit-o în nota anterioară, există o altă metodă de trimitere a unei interogări pe protocolul HTTP - metoda postală. Metoda postală este, de asemenea, foarte des folosită în practică.
Dacă, pentru a se referi la metoda de obținere, este suficient pentru ca noi să introducem cererea către adresa URL, atunci totul funcționează în metoda postală pe un alt principiu.
Pentru a executa acest tip de cerere, trebuie să facem clic pe butonul cu tipul \u003d "Trimite atribut", care este situat pe pagina web. Rețineți că acest buton este amplasat în element.
Dacă utilizatorul introduce un text la câmpul de text și faceți clic pe butonul "Trimitere", atunci variabila de text va fi trimisă la server cu conținutul conținutului pe care utilizatorul a introdus-o.
Postați și obțineți cereri cu cuvinte simple
Această variabilă va fi trimisă prin metoda postală.
Dacă scrieți în formularul: