Ce este o solicitare http. În termeni simpli despre HTTP

Am decis că browserul (clientul) trimite cereri HTTP către server, iar serverul trimite răspunsuri HTTP către client. Aceste cereri și răspunsuri sunt formatate în conformitate cu anumite reguli. Există ceva ca o sintaxă, cum și în ce ordine ar trebui scrisă. Trebuie să existe o structură strict definită.

Să aruncăm o privire mai atentă asupra acestei structuri prin care cererile și răspunsurile sunt construite în protocolul HTTP.

O solicitare HTTP constă din trei părți principale, care apar în ordinea de mai jos. Între anteturi și corpul mesajului există o linie goală (ca separator reprezintă un caracter de avans de linie);

1. Linie de solicitare

2. Antetele mesajelor

Șir gol (delimitator)

3. corpul mesajului (Entity Body) – parametru opțional

Șir de interogare– specifică metoda de transfer, adresa URL care trebuie accesată și versiunea protocolului HTTP.

Titluri– descrie corpul mesajelor, transmite diverși parametri și alte informații și informații.

Conținutul mesajului- acestea sunt datele în sine care sunt transmise în cerere. Corpul mesajului este un parametru opțional și poate lipsi.

Când primim o solicitare de răspuns de la server, corpul mesajului este cel mai adesea conținutul paginii web. Dar, atunci când facem cereri către server, poate fi uneori prezent și, de exemplu, atunci când transferăm datele pe care le-am completat în formularul de feedback către server.

Vom analiza fiecare element al cererii mai detaliat în notele următoare.

Să luăm, de exemplu, o cerere reală către server. Am evidențiat fiecare parte a solicitării cu o culoare diferită: linia de solicitare este verde, anteturile sunt portocalii și corpul mesajului este albastru.

Solicitare browser:

GET / HTTP/1.1

Gazdă: site web

Agent utilizator: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Limba de acceptare: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3

Acceptare-Codificare: gzip, deflate

Cookie: wp-settings

Conexiune: păstrați-vă în viață

În exemplul următor, corpul mesajului este deja prezent.

Răspunsul serverului:

HTTP/1.1 200 OK

Tip de conținut: text/html; set de caractere=UTF-8

Transfer-Codificare: fragmentat

Conexiune: păstrați-vă în viață

Keep-Alive: timeout=5

Server: Apache

X-Pingback: //site/xmlrpc.php

document fara titlu



Acestea sunt mesajele schimbate între client și server prin HTTP.

Apropo, am configurat rapoarte, obiective și evenimente în sistemele Yandex Metrica și Google Analytics.

Vă prezentăm o descriere a principalelor aspecte ale protocolului HTTP - un protocol de rețea care, de la începutul anilor 90 până în prezent, permite browserului dvs. să încarce pagini web. Acest articol a fost scris pentru cei care abia încep să lucreze cu rețele de calculatoare și să dezvolte aplicații de rețea și care încă le este greu să citească singuri specificațiile oficiale.

HTTP- un protocol de transfer de date utilizat pe scară largă, destinat inițial transferului de documente hipertext (adică documente care pot conține link-uri care permit navigarea către alte documente).

Abrevierea HTTP reprezintă Protocolul de transfer hipertext, „protocol de transfer hipertext”. Conform specificației OSI, HTTP este un protocol de strat de aplicație (superior, al 7-lea). Versiunea actuală a protocolului, HTTP 1.1, este descrisă în specificația RFC 2616.

Protocolul HTTP implică utilizarea unei structuri de transfer de date client-server. Aplicația client generează o cerere și o trimite către server, după care software-ul server procesează cererea, generează un răspuns și îl trimite înapoi clientului. Aplicația client poate continua apoi să trimită alte solicitări, care vor fi procesate în același mod.

O sarcină care este rezolvată în mod tradițional folosind protocolul HTTP este schimbul de date între o aplicație de utilizator care accesează resurse web (de obicei un browser web) și un server web. În prezent, datorită protocolului HTTP operează World Wide Web.

HTTP este adesea folosit ca protocol de transport pentru alte protocoale de nivel de aplicație, cum ar fi SOAP, XML-RPC și WebDAV. În acest caz, se spune că protocolul HTTP este folosit ca „transport”.

API-ul multor produse software implică și utilizarea HTTP pentru transferul de date - datele în sine pot fi în orice format, de exemplu, XML sau JSON.

De obicei, transferul de date HTTP se realizează prin conexiuni TCP/IP. În acest caz, software-ul server utilizează de obicei portul TCP 80 (și, dacă portul nu este specificat explicit, atunci software-ul client utilizează de obicei portul 80 în mod implicit pentru deschiderea conexiunilor HTTP), deși poate folosi oricare altul.

Cum se trimite o solicitare HTTP?

Cel mai simplu mod de a înțelege protocolul HTTP este să încercați să accesați manual o resursă web. Imaginează-ți că ești browser și ai un utilizator care își dorește foarte mult să citească articole de Anatoly Alizar.

Să presupunem că a introdus următoarele în bara de adrese:

Http://alizar.habrahabr.ru/

În consecință, tu, ca browser web, acum trebuie să te conectezi la serverul web de la alizar.habrahabr.ru.

Pentru a face acest lucru, puteți utiliza orice utilitar adecvat de linie de comandă. De exemplu, telnet:

Telnet alizar.habrahabr.ru 80

Permiteți-mi să clarific imediat că, dacă vă răzgândiți brusc, apăsați Ctrl + „]” și apoi introduceți - acest lucru vă va permite să închideți conexiunea HTTP. Pe lângă telnet, puteți încerca nc (sau ncat) - în funcție de gusturi.

După ce vă conectați la server, trebuie să trimiteți o solicitare HTTP. Acest lucru, apropo, este foarte ușor - cererile HTTP pot consta doar din două linii.

Pentru a genera o solicitare HTTP, trebuie să compuneți o linie de pornire și, de asemenea, să setați cel puțin un antet - acesta este antetul Host, care este obligatoriu și trebuie să fie prezent în fiecare solicitare. Faptul este că conversia unui nume de domeniu într-o adresă IP se realizează pe partea clientului și, în consecință, atunci când deschideți o conexiune TCP, serverul la distanță nu are nicio informație despre adresa care a fost folosită pentru conexiune: ar putea fi, de exemplu, adresa alizar.habrahabr.ru, habrahabr.ru sau m.habrahabr.ru - și în toate aceste cazuri răspunsul poate diferi. Cu toate acestea, de fapt, în toate cazurile conexiunea la rețea este deschisă cu nodul 212.24.43.44, și chiar dacă inițial la deschiderea conexiunii nu a fost specificată această adresă IP, ci un nume de domeniu, serverul nu este informat despre acest lucru în în orice fel - și de aceea această adresă este necesară trecerea în antetul Gazdă.

Linia de cerere de pornire (inițială) pentru HTTP 1.1 este compusă conform următoarei scheme:

De exemplu (o astfel de linie de început poate indica faptul că pagina principală a site-ului este solicitată):

Și, desigur, nu uitați că orice tehnologie devine mult mai simplă și mai clară atunci când începeți să o utilizați.

Mult succes si invatare fructuoasa!

Etichete: Adăugați etichete

Despre care am discutat în postarea anterioară, există o altă metodă de trimitere a unei cereri prin protocolul HTTP - metoda POST. Metoda POST este, de asemenea, foarte des folosită în practică.

Dacă, pentru a contacta serverul folosind metoda GET, trebuia doar să introducem o cerere în URL, atunci în metoda POST totul funcționează pe un alt principiu.

Pentru a executa acest tip de solicitare, trebuie să facem clic pe butonul cu atributul type="submit", care se află pe pagina web. Vă rugăm să rețineți că acest buton se află în element

, care are atributul de metodă setat la post.

Luați în considerare acest cod HTML:

Introdu text:


Dacă utilizatorul introduce un text în câmpul de text și dă clic pe butonul „Trimite”, variabila text va fi trimisă la server cu valoarea conținutului introdus de utilizator. Această variabilă va fi trimisă folosind metoda POST.

Dacă scrieți formularul astfel:

Apoi datele vor fi trimise folosind metoda GET.

Dacă, în cazul unei solicitări GET, cantitatea de date pe care le-am putea transfera a fost limitată de lungimea barei de adrese a browserului, atunci în cazul unei solicitări POST, nu există o astfel de limitare și putem transfera sume semnificative. De informații.

O altă diferență între metoda POST și metoda GET este că metoda POST ascunde toate variabilele pe care le transmite și valorile acestora în corpul său (Entity-Body). În cazul metodei GET, acestea au fost stocate în șirul de solicitare (Request-URI).

Iată un exemplu de solicitare făcută folosind metoda POST:

POST / HTTP/1.0\r\n
Gazdă: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: venit=1\r\n
Tip de conținut: application/x-www-form-urlencoded\r\n
Lungimea conținutului: 35\r\n
\r\n
login=Dima&parola=12345

Astfel, prin transmiterea datelor folosind metoda POST, va fi mult mai dificil pentru un atacator să le intercepteze, deoarece sunt ascunse din vedere directă, astfel încât metoda POST de transmitere a datelor este considerată o metodă mai sigură.

În plus, folosind metoda POST puteți transfera nu numai text, ci și date multimedia (imagini, audio, video). Există un parametru special Content-Type care determină tipul de informații care trebuie transmise.

Și în final, pentru a primi pe server datele care au fost transmise prin această metodă, se folosește variabila POST.

Iată un exemplu de procesare în PHP:

echo $_POST['text'];
?>

Apropo, am configurat rapoarte, obiective și evenimente în sistemele Yandex Metrica și Google Analytics.

Începând cu a doua versiune 8 a platformei, utilizatorii și dezvoltatorii au posibilitatea de a utiliza cererea http direct în 1C. Programul acceptă două tipuri de solicitări:

  • solicitări POST;
  • solicitări GET.

Astfel, a fost creat un instrument destul de convenabil pentru schimbul de date și interacțiunea cu serviciile și serviciile web care operează prin http.

GET cerere

Desigur, cele mai simple exemple de utilizare a interogărilor ilustrează capacitățile lor mult mai bine decât multe rânduri de descriere. Deci să încercăm:

  1. Să obținem corpul paginii principale a site-ului nostru;
  2. Vom lucra la redirecționarea cererii;
  3. Hai sa facem poza de pe site.

Obținerea corpului site-ului

Să începem cu ceva simplu. In fig..

Rezultatul executării acestei secțiuni de cod este un text destul de mare, a cărui secțiune finală este prezentată în Fig. 2.

Fig.2

În prima linie de cod creăm un obiect de conexiune la resursa http. Un obiect poate conține următoarele proprietăți:

  • Server - șir de conexiune care conține adresa serverului;
  • Port – conține un număr care indică implicit portul serverului, în funcție de tipul de conexiune, puteți specifica 80 pentru conexiunile nesecurizate sau 443 pentru cele securizate SSL;
  • Nume de utilizator – indicat dacă este necesară autorizarea pe server;
  • Parolă – parola de utilizator pentru resursa specificată;
  • Proxy – poate conține un obiect de tip InternetProxy, indicat atunci când se folosește un proxy pentru a comunica cu serverul;
  • Conexiune sigură – valoarea implicită este FALSE, trecerea la TRUE indică utilizarea protocolului https.

În plus, obiectul HTTPConnection are propriile sale metode, apelare care vă permite să descrieți mai complet algoritmul de execuție a handlerului:

  • CallHTTPmethod – conține doi parametri necesari, HTTPmethod și HTTPrequest, acceptă capacitatea de a scrie corpul răspunsului în fișierul specificat în al treilea parametru;
  • Scriere – folosind o cerere PUT, trimite date către server;
  • Modify – modifică un obiect prin procesarea cererilor PATCH;
  • SendForProcessing – o metodă care indică utilizarea unei cereri POST, ca în toate metodele anterioare, trebuie să conțină textul solicitării și poate transmite și adresa fișierului de răspuns pentru înregistrarea datelor;
  • Primire - acest lucru va fi discutat mai detaliat mai jos;
  • GetHeadings este o altă metodă care va fi folosită în articol;
  • Delete este de fapt o solicitare Delite care elimină de pe server resursa transmisă în cerere.

În a doua linie creăm o solicitare către site-ul selectat, textul solicitării noastre conține o bară oblică, ceea ce înseamnă că dorim să obținem pagina principală. Dacă bara oblică ar fi urmată de orice expresie, de exemplu „pagina2” sau „știri”, am obține o pagină diferită.

A treia linie execută cererea noastră către server.

În a patra arătăm rezultatul.

Gestionarea redirecționării cererii http

Să ne imaginăm o situație în care trebuie să obținem în mod programatic un rezultat de căutare prin orice motor de căutare folosind tasta „Interogări în 1C”. Secțiunea de cod necesară pentru a accesa GOOGLE este prezentată în Fig. 3

Fig.3

Aici, pe lângă structurile deja familiare nouă, există Antete și Cod de stare. Să ne ocupăm de ei.

Cod de stare – valoarea standard specificată în „Solicitare de comentarii”, poate lua următoarele valori:

  1. Dacă totul este în regulă, valoarea va reveni în intervalul de la 100 la 299;
  2. În cazul redirecționării, va fi returnat un cod în intervalul de la 300 la 399, în cazul nostru, o redirecționare permanentă reușită către o resursă va fi determinată de codul 301;
  3. Dacă există erori în cerere, parametrul va lua o valoare de la 400 la 499;
  4. O valoare în intervalul 500-599 indică probleme cu serverul.

Fiecare pagină are un titlu, în textul căruia se pot distinge mai mulți parametri (Fig. 4):

  1. Diagrama de conectare (tot ceea ce vine înainte de două bare oblice „//”);
  2. Linia de adresa de conectare;
  3. Nume de utilizator și parolă;
  4. Port și gazdă la care să vă conectați.

Această împărțire este efectuată de funcția SplitAddressLine. După ce am primit astfel o nouă adresă, putem salva pagina pe computerul nostru și o deschide în browserul implicit (procedura GetPage).

Fig.5

Nu există funcții noi sau modalități de lucru cu solicitările, de fapt creăm un document text din corpul site-ului și lansăm pagina în browser.

Plasăm fișierul la rădăcina unității D și îl numim test.

Poza o luăm de pe site

Apare o întrebare firească: dacă nu avem nevoie de întregul site, ci trebuie doar să obținem elementele sale individuale, se poate face acest lucru și cum? Da, poti. Codul programului care vă permite să faceți acest lucru este prezentat în Fig. 6

Fig.6

După cum puteți vedea din figură, în corpul cererii avem codul elementului de structură a site-ului pe care trebuie să-l primim. Această parte nu a fost în descrierea noastră anterioară și trebuie să ne oprim asupra acestui punct mai detaliat.

Am folosit un browser Opera pentru a accesa site-ul. Are un instrument important pentru noi: când faceți clic dreapta pe un element, puteți apela un meniu contextual, unul dintre elementele căruia este „Vizualizare cod element”.

Datorită lui putem obține adresa care va fi folosită în cerere Fig. 7.

Solicitare POST

Spre deosebire de cererile simple Get, cererile POST http au un corp text, care poate fi stocat fie sub formă de text simplu, fie sub formă de fișiere cu extensia xml, soap, json. Există destul de multe instrumente în rețea pentru crearea textelor de solicitare care vă permit să depanați și să monitorizați execuția anumitor solicitări.

În 1C, pentru a lansa o cerere cu un anumit text, obiectul de cerere HTTP are procedura SetBodyFromString.