POST (HTTP)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 30 ianuarie 2019; verificările necesită 14 modificări .

În programare, POST  este una dintre multele metode de solicitare acceptate de protocolul HTTP utilizat pe World Wide Web. Metoda de solicitare POST este pentru trimiterea unei cereri în care serverul web acceptă datele incluse în corpul mesajului pentru stocare. Este adesea folosit pentru a încărca un fișier sau a trimite un formular web completat .

În schimb, metoda HTTP GET este concepută pentru a primi informații de la server. Ca parte a unei cereri GET, unele date pot fi transmise în șirul de interogare URI, indicând, de exemplu, termenii de căutare, intervalele de date sau alte informații care definesc cererea. Ca parte a unei cereri POST, o cantitate arbitrară de date de orice tip poate fi trimisă către server în corpul mesajului de solicitare. Câmpurile de antet dintr-o solicitare POST indică de obicei tipul de conținut .

Trimiterea datelor

World Wide Web și protocolul HTTP se bazează pe o serie de metode de solicitare sau „verbe”, inclusiv POST și GET, precum și PUT, DELETE și o serie de altele. Browserele web folosesc de obicei doar GET și POST, dar aplicațiile REST online forțează mult mai multe. Metoda POST este destinată să trimită o reprezentare a unei noi entități către server, astfel încât aceasta să fie stocată ca o sub-resursă a resursei identificate de URI. De exemplu, pentru URI-ul http://example.com/customers  (link inaccesibil) , solicitările POST ar putea reprezenta clienți noi, fiecare conținând un nume, o adresă, informații de contact și altele asemenea. Dezvoltatorii de site-uri web s-au îndepărtat de acest concept din două motive. În primul rând, nu există niciun motiv tehnic pentru ca un URI să descrie textual resursele web subiacente în care vor fi stocate datele trimise prin metoda POST. Într-adevăr, ultima parte a URI-ului este mai probabil să descrie pagina de procesare a aplicației web și tehnologia acesteia, cum ar fi http://example.com/applicationform.php  (link mort) . În al doilea rând, având în vedere limitarea naturală a majorității browserelor web de a utiliza numai metodele GET sau POST, dezvoltatorii au recunoscut necesitatea de a adăuga mai multe caracteristici la metoda POST, inclusiv modificarea intrărilor existente și ștergerea lor.

Încercările de a corecta prima deficiență au început în 1998. Cadrele de aplicații web, cum ar fi Ruby on Rails și altele, au ajutat dezvoltatorii să ofere utilizatorilor lor adrese URL care pot fi citite de om . În ceea ce privește al doilea punct, puteți scrie scripturi la nivelul clientului sau aplicații autonome care vor folosi alte metode HTTP, apoi le convertiți într-o metodă POST.

Adică, nu se poate spune că fiecare formular web trebuie să conțină o metodă POST în eticheta de deschidere. Multe formulare sunt folosite mai precis pentru a prelua informații de pe server, fără a modifica bazele de date subiacente. Pentru astfel de formulare de căutare, metoda GET este ideală.

Există momente când HTTP GET este mai puțin potrivit chiar și pentru obținerea de date. Un exemplu este atunci când o cantitate mare de date trebuie scrisă la adresa URL. Browserele și serverele web pot avea limite privind lungimea adreselor URL pe care le procesează fără trunchiere sau eroare. Caracterele rezervate de codificare URL din adresă și șirul de interogare pot crește foarte mult lungimea, în timp ce Apache HTTP Server poate gestiona până la 4000 de caractere (8190 de octeți) într-o adresă URL [1] , Microsoft Internet Explorer limitează lungimea oricărei adrese URL la 2048 personaje .

De asemenea, HTTP GET nu trebuie utilizat pentru informații sensibile, cum ar fi numele de utilizator și parolele, care trebuie furnizate împreună cu alte date pentru a finaliza solicitarea. Chiar și cu HTTPS , care împiedică interceptarea în tranzit, istoricul browserului și jurnalele serverului web sunt probabil să conțină adrese URL complete în text simplu, care pot fi găsite dacă sistemul este piratat. În aceste cazuri, se utilizează HTTP POST.

Utilizați pentru trimiterea formularelor web

Când un browser web trimite o solicitare POST cu elemente de formular web, tipul implicit de date media internet este application/x-www-form-urlencoded. Acesta este un format pentru codificarea perechilor cheie-valoare cu posibilitatea de chei duplicate. Fiecare pereche cheie-valoare este separată prin &, cheia este separată de valoare prin =. În chei și valori, spațiile sunt înlocuite cu +, iar apoi, folosind codificarea URL, toate caracterele non-alfanumerice sunt înlocuite.

De exemplu,

Nume: Jonathan Doe Varsta: 23 Formula: a + b == 13%!

va fi codificat ca

Nume=Jonathan+Doe&Vârsta=23&Formula=a+%2B+b+%3D%3D+13+%25%21

Începând cu HTML 4.0, formularele pot trimite și date în mai multe părți/formă , așa cum este definit în RFC 2388 (vezi și RFC 1867 pentru o versiune experimentală anterioară definită ca o extensie a HTML 2.0 și la care se face referire în HTML 3.2). Un caz special al metodei POST la accesarea aceleiași pagini care deține formularul se numește postback.

Efect asupra stării serverului

În RFC 2616 , metoda POST trebuie utilizată pentru orice context în care cererea nu este idempotentă : adică provoacă o schimbare a stării serverului de fiecare dată când este executată, cum ar fi postarea unui comentariu la o postare pe blog sau un vot pe Internet. În practică, metoda GET este adesea rezervată, nu doar pentru acțiunile idempotente, ci și pentru cele nulpotente, adică fără efecte secundare (spre deosebire de „fără efecte secundare la a doua și la cererile ulterioare” ca și în cazul operațiilor idempotente). Din acest motiv, site-urile motoarelor de căutare, cum ar fi indexatorii motoarelor de căutare, folosesc de obicei metoda GET exclusiv pentru a împiedica solicitările automate să întreprindă vreo acțiune.

Cu toate acestea, există motive pentru care POST este folosit chiar și pentru solicitări idempotente, mai ales dacă cererea folosește caractere non-ASCII sau este foarte lungă, din cauza restricțiilor URL - șirul de interogare a metodei GET poate fi foarte lung, mai ales când se utilizează codificarea URL.

Note

  1. core - Apache HTTP Server Versiunea 2.2 . httpd.apache.org. Preluat la 18 aprilie 2019. Arhivat din original la 22 mai 2014.

Link -uri