Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Savjet
  • Što je internetski protokol http. Sve o protokolima za prijenos podataka http i https

Što je internetski protokol http. Sve o protokolima za prijenos podataka http i https

HyperText Transfer Protocol (HTTP) je protokol aplikacijskog sloja koji povezuje aplikacije preko distribuiranih, dijeljenih ili heterogenih informacijskih sustava. Protokol omogućuje aplikacijama razmjenu podataka na način čitljiv ljudima.

Kao što mu ime govori, izvorno je HTTP bio namijenjen za prijenos između aplikacija takozvanog hiperteksta, koji je posebna vrsta podataka stvorena u skladu sa standardom HTML (HyperText Markup Language). Hipertekstualni dokument sastoji se od podataka označenih HTML oznakama i kombinacija je teksta, slika, hiperveza i drugih sredstava za predstavljanje podataka. Hiperveze – jedan od najvažnijih dijelova HTML dokumenta – interaktivna su područja kojima se može manipulirati kako bi se proizveli podaci povezani s hipervezom. To omogućuje korisniku koji radi s hipertekstualnim informacijama da se kreće unutar skupa dokumenata ili čak cijelog Interneta, dobivajući informacije od interesa pomoću kontekstualnih hiperveza.

HTTP protokol je nadgradnja nad TCP protokolom i sredstvo je kontrole sadržaja prenesenih podataka. Za razliku od TCP-a, koji nije uzeo u obzir strukturu odaslanih paketa, HTTP ugrađuje metainformacije u podatke, što primatelju omogućuje ispravnu interpretaciju primljenih podataka. Globalni internet (koji se naziva i World Wide Web ili WWW) radi na temelju HTTP-a. Prva verzija protokola - HTTP / 0.9 - imala je prilično ograničene mogućnosti, ali s aktivnim razvojem svjetske mreže pojavile su se nove verzije: HTTP / 1.0 i HTTP / 1.1, koje su omogućile kontrolu prijenosa ne samo hipertekstualnih informacija preko računalne mreže, ali i proizvoljne binarne datoteke: zvučne, grafičke, arhivske itd.

Zbog činjenice da je HTTP dodatak preko TCP protokola, postoje i dvije strane prijenosa podataka: klijent i poslužitelj.

Klijent pokreće vezu i traži neke podatke ili usluge od poslužitelja. Klijent je, u pravilu, program koji se naziva preglednik (preglednik), koji omogućuje i prikaz hipertekstualnih informacija i primanje datoteka drugih formata. Kako bi dobio neke informacije od interesa, klijent šalje zahtjev poslužitelju koji sadrži opis traženih informacija.

Prilikom prijenosa podataka putem HTTP-a, poslužitelj se naziva web-poslužitelj. Ovaj program obrađuje zahtjeve klijenata, prenoseći tražene podatke u obliku odgovora (response), koji osim traženih podataka sadrže i metainformacije koje ih opisuju.

Dobijanje podataka od interesa za korisnika sastoji se od sljedećih faza:

Korisnik upisuje adresu resursa od interesa u liniji preglednika.

Preglednik, na temelju informacija primljenih od korisnika, kao i uzimajući u obzir njegove postavke i konfiguraciju operativnog sustava, generira zahtjev.

Preglednik se povezuje s poslužiteljem, moguće na udaljenom računalu, i šalje mu zahtjev.

Poslužitelj, analizirajući zahtjev, izvodi potrebne radnje: generira odgovor, uključujući tijelo traženog dokumenta. Ako se radi o hipertekstualnom dokumentu, on se učitava iz datoteke ili generira dinamički putem skripte. Odgovor također uključuje informacije o podacima koje sadrži.

Poslužitelj šalje odgovor pregledniku.

Preglednik analizira odgovor i ili sprema dobivene podatke u datoteku, ili, u slučaju hipertekstualnog dokumenta, analizira HTML oznake i prikazuje dokument na zaslonu.

Valja napomenuti da klijentski program može biti ne samo preglednik, ali se svi koraci, s iznimkom, možda, prvog, izvode u svakom slučaju.

Treba napomenuti da se ovdje razmatra izravna veza klijenta s poslužiteljem koji sadrži informacije od interesa, ali to nije uvijek moguće zbog različitih okolnosti. U tom slučaju, veza se može izvesti preko jedne ili više međutočaka spajanja. Ove međutočke mogu se podijeliti u tri skupine:

Proxy poslužitelji (proxy-server) - posrednički program koji obavlja funkcije i klijenta i poslužitelja kako bi kreirao zahtjeve u ime drugih klijenata. Zahtjeve opslužuje proxy poslužitelj ili im se prosljeđuju s promjenama u njima (u ovom slučaju proxy poslužitelj se naziva neprozirnim) ili nepromijenjeni (u ovom slučaju proxy poslužitelj se naziva transparentnim). Proxy poslužitelj omogućuje grupi računala da djeluje kao jedan klijent, što se često koristi kada su lokalne mreže spojene na Internet.

Gateway - poput proxy poslužitelja, prevodi zahtjeve, međutim, ja ih ne mijenjam. Gateway prima zahtjev od klijenta za poslužitelj koji sadrži traženi resurs. Stoga klijent ne može odrediti spaja li se preko pristupnika ili izravno na poslužitelj koji ga sadrži.

Tunel je posrednički program koji održava vezu. Iako se nakon uspostavljanja veze tunel ne smatra elementom prijenosa preko HTTP protokola, vezu obično pokreće HTTP zahtjev. Tunel prekida svoj rad ako barem jedan od sudionika u razmjeni podataka zatvori vezu.

Za održavanje funkcionalnosti prijenosa podataka pri povezivanju preko međutočaka nisu potrebne nikakve promjene u zahtjevima i odgovorima, osim u slučaju proxy poslužitelja: u tom slučaju zahtjev klijenta mora sadržavati dodatna polja. Međutim, sa stajališta poslužitelja, razmjena podataka se odvija izravno s klijentom, stoga se zahtjevi ne mijenjaju. Stoga pri izradi programa nije uzeta u obzir mogućnost povezivanja preko međutočaka.

Zahtjev koji klijent šalje poslužitelju služi za točnu identifikaciju traženog resursa, a sadrži i informacije potrebne za ispravnu obradu zahtjeva.

Zahtjev se po svojoj strukturi sastoji od tri dijela:

Niz upita

Blok zaglavlja

Redak zahtjeva sastoji se od tri polja, odvojena razmacima (ASCII kod 20h, u daljnjem tekstu SP), a završava kombinacijom dva znaka: povratak na nosač (ASCII kod 0Dh, u daljnjem tekstu CR) i prijelaz retka (ASCII kod 0Ah, u daljnjem tekstu LF ) ... Elementi niza upita predstavljeni su sljedećim poljima:

Metoda - definira način obrade koji će se primijeniti na traženi resurs. Ovisno o navedenoj metodi, format zahtjeva može biti različit. Važeće metode:

Tijekom razvoja programa, podrška je uvedena samo za GET metodu, zbog činjenice da je to metodu koju preglednik navodi u zahtjevu kreiranom prema zadanim postavkama.

URI (Universal Resource Identifier) ​​resurs (URI resursa) - označava lokaciju traženog resursa u standardiziranom formatu, odnosno adresu resursa. Kada se koristi metoda GET, ovaj niz može uključivati ​​skup parametara proslijeđenih poslužitelju kao nizove formata "parameter_name = parameter_value", odvojenih ampersandom `&". Blok parametara nalazi se na kraju URI niza i odvojen s adrese upitnikom `?".

Verzija HTTP protokola - tijekom razvoja programa implementirana je podrška za primanje zahtjeva koji odgovaraju verzijama 1.0 i 1.1, koji odgovaraju nizovima "HTTP / 1.0" i "HTTP / 1.1".

Blok zaglavlja nakon retka zahtjeva može se sastojati od jednog ili više zaglavlja:

Zaglavlje zahtjeva - sadrži polja koja služe kao modifikatori zahtjeva i sadrže informacije o zahtjevu i konfiguraciji klijentskog stroja.

Zaglavlje objekta - ako zahtjev uključuje neki objekt (proizvoljni skup podataka), polja ovog zaglavlja opisuju objekt, ukazujući na njegov format, kodiranje i druge parametre.

Zajedničko zaglavlje - sadrži parametre usluge potrebne za osiguravanje ispravnog prijenosa i omogućavanje dodatnih usluga kao što je predmemoriranje.

Dio zaglavlja završava s dva para znakova CR i LF, što olakšava utvrđivanje činjenice završetka primanja zahtjeva, budući da sam zahtjev ne može sadržavati takvu kombinaciju znakova.

Odgovor koji poslužitelj šalje klijentu može se generirati samo kao rezultat obrade zahtjeva klijenta. Sadrži opis rezultata izvršenja upita i, ako su traženi podaci, uključuje traženi resurs.

Po svojoj strukturi, odgovor se sastoji od sljedećih dijelova:

Statusna traka

Blok zaglavlja

Statusna linija sastoji se od tri polja, odvojena SP znakovima, a na kraju sadrži niz znakova CR, LF. Stavke statusne trake:

Verzija HTTP protokola - razvijeni program uvijek koristi niz "HTTP / 1.1".

Statusni kod je numerički kod od tri znaka koji identificira rezultat zahtjeva. Iako standard definira prilično velik skup statusnih kodova, program koristi sljedeće kodove:

  • 200 - uspješan završetak;
  • 400 - nevažeći zahtjev;
  • 401 - neovlašteni pristup;
  • 404 - izvor nije pronađen;
  • 405 - nije primjenjiva metoda;
  • 505 je nepodržana HTTP verzija.

Fraza razloga je kratka fraza koja objašnjava statusni kod zahtjeva. Standard nudi standardni skup fraza, ali je program malo izmijenio ovaj skup.

Blok zaglavlja koji slijedi nakon statusne trake može se sastojati od jednog ili više zaglavlja:

Zaglavlje zahtjeva

Naslov objekta

Opći naslov

Detaljno razmatranje naslova izvršeno je u stavku 2.2.3.3.

Dio zaglavlja završava s dva para znakova CR i LF, nakon čega slijedi proizvoljni skup znakova – objekt. Kada je program pokrenut, takvi objekti mogu biti samo hipertekstualni dokumenti u HTML formatu, dinamički generirani dodacima.

Izdali smo novu knjigu “Content Marketing na društvenim mrežama: Kako doći do glava pretplatnika i zaljubiti se u svoju marku”.

Pretplatite se na

HTTP je onaj koji omogućuje prijenos podataka. U početku je stvoren za slanje i primanje dokumenata koji sadrže veze unutar za obavljanje prijelaza na resurse trećih strana.

Kratica glasi "HyperText Transfer Protocol", što znači "protokol za prijenos". HTTP pripada grupi slojeva aplikacije na temelju specifičnosti koje koristi OSI.

Da bismo bolje razumjeli što HTTP znači, pogledajmo jednostavnu analogiju. Zamislimo da komunicirate sa strancem na društvenoj mreži. On ti pošalje poruku na engleskom, ti je primiš. Ali ne možete razumjeti sadržaj, jer ne poznajete dovoljno jezik. Koristite rječnik za dešifriranje poruke. Shvativši suštinu, strancu odgovarate na ruskom i šaljete odgovor. Stranac dobiva odgovor i uz pomoć tumača dešifrira poruku. Kako bi se cijeli mehanizam pojednostavio, internetski protokoli HTTP djeluju kao prevoditelj. Uz njihovu pomoć preglednik može prevesti šifrirani sadržaj web stranica i prikazati njihov sadržaj.

Čemu služi HTTP?

HTTP protokol se koristi za razmjenu informacija pomoću modela klijent-poslužitelj. Klijent sastavlja i šalje zahtjev poslužitelju, zatim ga poslužitelj obrađuje i analizira, nakon čega se kreira odgovor i šalje korisniku. Na kraju ovog procesa klijent daje novu naredbu i sve se ponavlja.

Dakle, HTTP protokol omogućuje razmjenu informacija između različitih korisničkih aplikacija i posebnih web poslužitelja, kao i povezivanje s web resursima (obično preglednicima). Danas opisani protokol napaja cijelu mrežu. HTTP protokol za prijenos podataka također se koristi za prijenos informacija preko drugih protokola niže razine kao što su WebDAV ili SOAP. U ovom slučaju, protokol je prijevozno sredstvo. Mnogi se programi također oslanjaju na HTTP kao svoj primarni komunikacijski alat. Podaci se prikazuju u različitim formatima, na primjer, JSON ili XML.

HTTP je protokol za razmjenu informacija putem IP/TCP veze. Obično poslužitelj za to koristi port 80 TCP tipa. Ako port nije naveden, klijentski softver će prema zadanim postavkama koristiti TCP port 80. U nekim slučajevima mogu se koristiti i drugi priključci.

HTTP protokol koristi simetričnu shemu šifriranja i koristi simetrične kriptosustave. Simetrični kriptosustavi uključuju korištenje istog ključa za šifriranje i dešifriranje informacija.

Kako se HTTP razlikuje od HTTPS-a

Razlika se može pronaći čak i iz dekodiranja kratica. HTTPS je skraćenica od Hypertext Transfer Protocol Protection. Dakle, HTTP je zaseban protokol, a HTTPS je proširenje za njegovu zaštitu. Preko HTTP-a informacije se prenose nezaštićene, a HTTPS pruža kriptografsku zaštitu. To posebno vrijedi za resurse s odgovornim ovlaštenjem. To mogu biti društvene mreže ili stranice platnih sustava.

Zašto je prijenos nezaštićenih podataka opasan? Program presretača može ih prenijeti kibernetičkim kriminalcima u bilo kojem trenutku. HTTPS ima složenu tehničku organizaciju, koja vam omogućuje pouzdanu zaštitu informacija i isključivanje mogućnosti neovlaštenog pristupa njima. Razlika je i u lukama. HTTPS obično radi na portu 443.

Dakle, HTTP se koristi za prijenos podataka, a HTTPS omogućuje siguran prijenos podataka korištenjem enkripcije i autorizacije na resursima s visokom razinom sigurnosti.

Dodatna funkcionalnost

HTTP je bogat funkcionalnošću i kompatibilan je s raznim proširenjima. Specifikacija 1.1 koja se danas koristi omogućuje korištenje zaglavlja za nadogradnju za prebacivanje i rad kroz druge protokole prilikom razmjene podataka. Da bi to učinio, korisnik mora poslati zahtjev poslužitelju s ovim zaglavljem. Ako se poslužitelj treba prebaciti na određenu razmjenu koristeći drugi protokol, vraća zahtjev klijentu, koji prikazuje status "426 Upgrade Required".

Ova je značajka posebno relevantna za razmjenu informacija putem WebSocketa (ima specifikaciju RFC 6455, omogućuje razmjenu podataka u bilo kojem trenutku, bez nepotrebnih HTTP zahtjeva). Za prebacivanje na WebSocket, jedan korisnik šalje zahtjev sa zaglavljem Upgrade i vrijednošću "websocket". Poslužitelj tada odgovara s "101 Switching Protocols". Nakon ovog trenutka počinje prijenos informacija putem WebSocketa.

Evo opisa glavnih aspekata HTTP protokola, mrežnog protokola koji je vašem pregledniku omogućio učitavanje web stranica od ranih 90-ih do danas. Ovaj članak je napisan za one koji tek počinju raditi s računalnim mrežama i razvijati mrežne aplikacije, a kojima je još uvijek teško samostalno pročitati službene specifikacije.

HTTP- široko rasprostranjeni protokol za prijenos podataka, izvorno namijenjen prijenosu hipertekstualnih dokumenata (odnosno dokumenata koji mogu sadržavati veze koje vam omogućuju organiziranje prijelaza na druge dokumente).

Kratica HTTP je kratica za Protokol za prijenos hiperteksta, "Protokol za prijenos hiperteksta". Prema OSI specifikaciji, HTTP je protokol aplikacijskog (gornjeg, 7.) sloja. Trenutna verzija protokola, HTTP 1.1, opisana je u RFC 2616 specifikaciji.

HTTP protokol pretpostavlja korištenje strukture prijenosa podataka klijent-poslužitelj. Klijentska aplikacija generira zahtjev i šalje ga poslužitelju, nakon čega poslužiteljski softver obrađuje taj zahtjev, generira odgovor i šalje ga natrag klijentu. Klijentska aplikacija tada može nastaviti slati druge zahtjeve, koji će se obraditi na sličan način.

Problem koji se tradicionalno rješava korištenjem HTTP protokola je razmjena podataka između korisničke aplikacije koja pristupa web resursima (obično web pregledniku) i web poslužitelja. Trenutno je zahvaljujući HTTP protokolu osiguran rad World Wide Weba.

Također, HTTP se često koristi kao komunikacijski protokol za druge protokole aplikacijskog sloja kao što su SOAP, XML-RPC i WebDAV. U ovom slučaju se kaže da se HTTP protokol koristi kao "transport".

API mnogih softverskih proizvoda također podrazumijeva korištenje HTTP-a za prijenos podataka - sami podaci mogu biti u bilo kojem formatu, na primjer, XML ili JSON.

Obično se prijenos podataka putem HTTP protokola provodi preko TCP/IP veza. Poslužiteljski softver obično koristi TCP port 80 (a ako port nije eksplicitno naveden, tada klijentski softver obično koristi 80. port prema zadanim postavkama za otvorene HTTP veze), iako može koristiti bilo koji drugi.

Kako mogu poslati HTTP zahtjev?

Najlakši način za razumijevanje HTTP protokola je pokušaj ručnog pristupa web resursu. Zamislite da ste preglednik i da imate korisnika koji stvarno želi čitati članke Anatolija Alizara.

Pretpostavimo da je u adresnu traku unio sljedeće:

Http://alizar.habrahabr.ru/

U skladu s tim, vi, kao web preglednik, sada se trebate povezati s web poslužiteljem na alizar.habrahabr.ru.

Da biste to učinili, možete koristiti bilo koji odgovarajući uslužni program naredbenog retka. Na primjer telnet:

Telnet alizar.habrahabr.ru 80

Odmah ću pojasniti da ako se iznenada predomislite, pritisnite Ctrl + "]", a zatim unesite - to će vam omogućiti da zatvorite HTTP vezu. Osim telneta, možete isprobati nc (ili ncat) po svom ukusu.

Nakon što se povežete s poslužiteljem, morate poslati HTTP zahtjev. Usput, ovo je vrlo jednostavno - HTTP zahtjevi mogu se sastojati od samo dva retka.

Da bi se formirao HTTP zahtjev, potrebno je sastaviti početni redak, a također postaviti barem jedno zaglavlje - to je Host zaglavlje, koje je obavezno i ​​mora biti prisutno u svakom zahtjevu. Činjenica je da se transformacija naziva domene u IP adresu provodi na strani klijenta i, sukladno tome, kada otvorite TCP vezu, udaljeni poslužitelj nema nikakve informacije o tome koja je adresa korištena za vezu: to može biti, na primjer, adresa alizar.habrahabr.ru, habrahabr.ru ili m.habrahabr.ru - i u svim tim slučajevima odgovor se može razlikovati. Međutim, zapravo se u svim slučajevima mrežna veza otvara s čvorom 212.24.43.44, pa čak i ako u početku, kada je veza otvorena, nije postavljena ova IP adresa, već neki naziv domene, poslužitelj nije obaviješten o tome ovo na bilo koji način - i zato je ovu adresu potrebno unijeti u zaglavlje Host.

Početni (početni) niz zahtjeva za HTTP 1.1 sastavljen je na sljedeći način:

Na primjer (početni redak poput ovog može značiti da se traži početna stranica web-mjesta):

I, naravno, ne zaboravite da svaka tehnologija postaje mnogo jednostavnija i jasnija kada je zapravo počnete koristiti.

Sretno i plodno učenje!

Oznake: Dodaj oznake

HTTP(HyperText Transfer Protocol - "Hypertext Transfer Protocol") - protokol na razini aplikacije za prijenos podataka (u početku - u obliku hipertekstualnih dokumenata). HTTP se temelji na tehnologiji "klijent-poslužitelj", odnosno pretpostavlja se da postoje potrošači (klijenti) koji pokreću vezu i šalju zahtjev, te davatelji (poslužitelji) koji čekaju vezu kako bi primili zahtjev, izvode potrebne radnje i vratite poruku s rezultatom.

HTTP se također koristi kao "transport" za druge protokole aplikacijskog sloja kao što su SOAP, XML-RPC, WebDAV.

Glavni objekt manipulacije u HTTP-u je resurs na koji ukazuje URI (Uniform Resource Identifier) ​​u zahtjevu klijenta. Obično su ti resursi datoteke pohranjene na poslužitelju, ali mogu biti logički objekti ili nešto apstraktno. Značajka HTTP protokola je mogućnost specificiranja u zahtjevu i odgovoru načina predstavljanja istog resursa u različitim parametrima: formatu, kodiranju, jeziku itd. Zahvaljujući mogućnosti specificiranja metode kodiranja poruke klijent i poslužitelj mogu razmjenjivati ​​binarne podatke, iako je ovaj protokol tekstualni.

HTTP je protokol na razini aplikacije, sličan mu je FTP, a SMTP je jednostavan protokol za prijenos pošte. Poruke se razmjenjuju prema uobičajenoj shemi "zahtjev-odgovor". HTTP koristi globalne URI-je za identifikaciju resursa. Za razliku od mnogih drugih protokola, HTTP je bez državljanstva. To znači da nema očuvanja međustanja između parova zahtjev-odgovor. Komponente koje koriste HTTP mogu neovisno održavati informacije o stanju povezane s najnovijim zahtjevima i odgovorima. Preglednik koji je zatražio može pratiti kašnjenja odgovora. Poslužitelj može pohraniti IP adrese i zaglavlja zahtjeva najnovijih klijenata. Međutim, sam protokol nije upoznat s prethodnim zahtjevima i odgovorima, ne pruža internu državnu potporu i nema takve zahtjeve.

    Proširivost

Mogućnosti protokola mogu se jednostavno proširiti implementacijom vlastitih zaglavlja uz održavanje kompatibilnosti s drugim klijentima i poslužiteljima. Oni će zanemariti nepoznata zaglavlja, ali i dalje mogu dobiti funkcionalnost koja im je potrebna za određene zadatke.

    HTTP / 1.1- trenutnu verziju protokola. Novost u ovom izdanju bio je način rada "trajne veze": TCP veza može ostati otvorena nakon slanja odgovora na zahtjev, što omogućuje slanje više zahtjeva u jednoj vezi. Klijent je sada dužan slati podatke o nazivu hosta na koji se poziva, što je omogućilo lakšu organizaciju shared hostinga.

HTTP ne pohranjuje podatke o transakciji, tako da sljedeća transakcija mora početi ispočetka. Prednost je u tome što HTTP poslužitelj može poslužiti mnogo više klijenata u danom vremenskom okviru, budući da se eliminiraju dodatni troškovi praćenja sesija od jedne veze do sljedeće. Postoji i nedostatak: složeniji CGI programi moraju koristiti skrivena polja za unos ili vanjska sredstva, poput kolačića, za pohranu informacija o transakcijama.

Metode HTTP zahtjeva

HTTP metoda- niz svih znakova, osim kontrolnih znakova i separatora, koji označavaju glavnu operaciju na resursu. Obično je metoda kratka engleska riječ napisana velikim slovima. Imajte na umu da je naziv metode osjetljiv na velika i mala slova.

Svaki poslužitelj mora podržavati barem metode GET i HEAD. Ako poslužitelj ne prepozna metodu koju je odredio klijent, tada bi trebao vratiti status 501 (nije implementirano). Ako poslužitelj poznaje metodu, ali nije primjenjiva na određeni resurs, vraća se poruka s kodom 405 (Metoda nije dopuštena). U oba slučaja, poslužitelj TREBA uključiti zaglavlje Dopusti u poruku odgovora s popisom podržanih metoda.

Osim metoda GET i HEAD, često se koristi i POST metoda.

  • Zaglavlja (parametri) HTTP zahtjeva, odgovora, entiteta

    Sva zaglavlja u HTTP protokolu podijeljena su u četiri glavne grupe (preporuča se slanje zaglavlja primatelju prema donjem redoslijedu):

      Opća zaglavlja(Glavna zaglavlja) - moraju biti uključeni u bilo koju poruku klijenta i poslužitelja.

      Zaglavlja zahtjeva(Zaglavlja zahtjeva) - koristi se samo u zahtjevima klijenata.

      Zaglavlja odgovora(Zaglavlja odgovora) - samo za odgovore s poslužitelja.

      Zaglavlja entiteta(Zaglavlja entiteta) - prate svaki entitet poruke. Zaglavlja entiteta su odvojena u zasebnu klasu kako se ne bi pomiješali sa zaglavljima zahtjeva ili zaglavljima odgovora prilikom prijenosa višestrukog sadržaja (MIME).

    Sva HTTP zaglavlja potrebna za funkcioniranje opisana su u glavnim RFC-ovima. Ako je potrebno, možete kreirati vlastita zaglavlja. Tradicionalno, prefiks "X-" dodaje se imenima takvih dodatnih zaglavlja kako bi se izbjegla sukobljavanja imena s mogućim postojećim.

    Redovi nakon glavnog retka zahtjeva (GET /index.html HTTP / 1.1) imaju sljedeći format: Parametar: vrijednost. Ovako se postavljaju parametri upita. Ovo je izborno, svi redovi nakon glavnog retka upita mogu nedostajati; u ovom slučaju poslužitelj prihvaća njihovu zadanu vrijednost ili na temelju rezultata prethodnog zahtjeva (kada radi u Connection: Keep-Alive modu).

      Parametar Povezivanje(veza) - može biti Keep-Alive i blizu. U HTTP 1.0, poslužitelj koji šalje tražene podatke prati prekid veze s klijentom, a transakcija se smatra završenom ako se ne pošalje zaglavlje Connection: Keep Alive. U HTTP 1.1 poslužitelj ne prekida vezu prema zadanim postavkama i klijent može postavljati druge zahtjeve. Budući da mnogi dokumenti imaju ugrađene druge dokumente - slike, okvire, aplete i tako dalje - to štedi vrijeme i troškove za klijenta koji bi se inače morao više puta povezivati ​​s istim poslužiteljem kako bi dobio samo jednu stranicu. Dakle, u HTTP 1.1, transakcija se može provlačiti kroz petlju sve dok klijent ili poslužitelj eksplicitno ne zatvori vezu.

      Parametar Korisnički agent- vrijednost je "kodna točka" preglednika.

      Parametar Prihvatiti- popis tipova sadržaja koje preglednik podržava prema redoslijedu njihove preferencije za ovaj preglednik.

      Parametar Domaćin- naziv domene s koje se traži resurs. Korisno ako poslužitelj ima nekoliko virtualnih poslužitelja pod istom IP adresom. U ovom slučaju, naziv virtualne domene određuje se iz ovog polja.

      Parametar Zadnja promjena(zadnja izmjena) (W3C posljednja izmjena) Datum i vrijeme zadnje izmjene dokumenta. Koristeći ga, klijent, kao iu slučaju s ETagom, može kontaktirati poslužitelj sa zahtjevom "If-Modified-Since" - u tom slučaju poslužitelj mora usporediti datum posljednje izmjene kopije pohranjene na klijentu s trenutni datum posljednje izmjene. Ako se podudaraju, to znači da kopija u predmemoriji klijenta nije zastarjela i da je ne treba ponovno preuzimati (kod odgovora "304 Nije modificirano"). Zadnja izmjena također je neophodna za ispravnu obradu stranice od strane robota koji koriste podatke o datumu izmjene stranice kako bi sortirali rezultate pretraživanja po datumu, kao i kako bi odredili učestalost ažuriranja vaše stranice.

    Za SSI dokumente, Apache će izdati "Last-Modified" ako je navedena direktiva "XBitHack full" (na primjer, u datoteci .htaccess)

      Parametar ETag(oznaka objekta) - Uvedeno u HTTP 1.1 (W3C ETag). ETag se koristi da svakoj stranici dodjeljuje jedinstveni identifikator čija se vrijednost mijenja kada se stranica (dokument) promijeni. ETag je hash ("otisak prsta") bajtova dokumenta, ako se promijeni barem jedan bajt u dokumentu, tada će se promijeniti i ETag. ETag se koristi prilikom keširanja dokumenta. Ovo zaglavlje se sprema na klijenta i u slučaju ponovnog pristupa dokumentu omogućuje pregledniku da kontaktira poslužitelj sa zahtjevom 'If-None-Match', a poslužitelj mora, prema vrijednosti oznake ETag, odrediti hoće li dokument (stranica) je promijenjen, a ako nije, odgovorite s kodom '304 Nije izmijenjeno'.

      Parametar Istječe(istek) (W3C Expires) - govori pregledniku koji vremenski interval može smatrati da je kopija stranice u predmemoriji svježa, te da uopće ne kontaktira poslužitelj sa zahtjevima. Ovo je prikladno za datoteke za koje sigurno znate da se neće mijenjati sljedećih sat/dan/mjesec: na primjer pozadinska slika stranice.

    Ostala HTTP zaglavlja:

      HTTP_X_FORWARDED_FOR

      HTTP_X_PROSLJEĐEN

      HTTP_FORWARDED_FOR

    • HTTP_X_COMING_FROM

      HTTP_COMING_FROM

    • HTTP_X_CLUSTER_CLIENT_IP

    • HTTP_XROXY_CONNECTION

      HTTP_PROXY_CONNECTION

      HTTP_USERAGENT_VIA - proxy

    Primjer raščlanjivanja HTTP zahtjeva

    HTTP zahtjev sastoji se od tri dijela: retka zahtjeva (odgovora), odjeljka zaglavlja, nakon čega slijedi izborno tijelo. Zaglavlja su običan tekst, pri čemu je svako zaglavlje odvojeno od sljedećeg znakom novog retka (\ r \ n), dok tijelo može biti tekstualno ili binarni podatak. Tijelo je odvojeno od zaglavlja s dva nova redaka.

    Zaglavlje zahtjeva sastoji se od glavnog (prvog) retka upita i sljedećih redaka koji pročišćavaju upit u glavnom retku. Sljedeći redovi također mogu nedostajati.

    Klijent pokreće transakciju na sljedeći način:

      Klijent komunicira s poslužiteljem korištenjem dodijeljenog broja porta, zadani službeni broj porta je 80. Klijent zatim šalje zahtjev za dokument specificirajući metodu, adresu dokumenta i broj HTTP verzije. Na primjer u glavnom retku zahtjeva GET /index.html HTTP / 1.1

      koristi se metoda GET koja zahtijeva dokument index.html koristeći verziju 1.1 HTTP-a.

      Klijent šalje informacije zaglavlja (izborno, zaglavlje hosta je potrebno) kako bi poslužitelju rekao svoje konfiguracijske informacije i formate dokumenata koje može prihvatiti. Sve informacije zaglavlja navedene su red po redak, s imenom i vrijednošću u svakom retku. Na primjer, zaglavlje u nastavku, koje šalje klijent, sadrži njegovo ime i broj verzije, kao i informacije o nekim od klijentovih preferiranih vrsta dokumenata: Host: list.mail.ru User-Agent: Mozilla / 5.0 (Ubuntu; X11 ; Linux x86_64; rv : 8.0) Gecko / 20100101 Firefox / 8.0 Prihvati: tekst / html, aplikacija / xhtml + xml, aplikacija / xml; q = 0,9, * / *; q = 0,8

      Naslov završava praznim redom.

      Slanjem zahtjeva i zaglavlja klijent može poslati dodatne podatke, na primjer, za CGI skripte.

    Poslužitelj odgovara na zahtjev klijenta na sljedeći način:

      Prvi dio odgovora poslužitelja je statusna linija koja sadrži tri polja: HTTP verziju, statusni kod i opis. Polje verzije sadrži broj verzije HTTP-a koji ovaj poslužitelj koristi za slanje odgovora. Statusni kod je troznamenkasti broj koji označava rezultat obrade klijentovog zahtjeva poslužiteljem. Opis koji slijedi nakon statusnog koda je jednostavno čovjeku čitljiv tekst koji objašnjava statusni kod. Na primjer, statusna traka HTTP / 1.1 304 Nije promijenjeno

      označava da poslužitelj koristi HTTP 1.1 za odgovor. Statusni kod 304 znači da je klijent zatražio dokument koristeći GET metodu, koristio zaglavlje If-Modified-Since ili If-None-Match, a dokument se od tog trenutka nije promijenio.

      Nakon statusne trake, poslužitelj klijentu šalje informacije zaglavlja koje sadrže informacije o samom poslužitelju i traženom dokumentu. Ispod je primjer zaglavlja: Datum: Čet, 15. prosinca 2011. 09:34:15 GMT Poslužitelj: Apache / 2.2.21 (Debian) X-Powered-By: PHP / 5.3.8-1 + b1 Istječe: čet, 19. studenog 1981. 08:52:00 GMT Kontrola predmemorije: bez pohrane, bez predmemorije, mora se ponovno potvrditi, naknadna provjera = 0, prethodna provjera = 0 Pragma: bez predmemorije Vary: Prihvati-Encoding Content-Encoding: gzip Keep - Alive: timeout = 5, max = 100 Veza: Keep-Alive Content-Type: text / html; skup znakova = utf-8

      Naslov završava praznim redom.

      Ako je zahtjev klijenta uspješan, tada se traženi podaci šalju. To može biti kopija datoteke ili izlaz CGI programa. Ako se zahtjev klijenta ne može udovoljiti, šalju se dodatni podaci u obliku razumljivog objašnjenja zašto poslužitelj nije mogao ispuniti zahtjev.

    HTTP statusni kod

    HTTP statusni kod dio je prvog retka odgovora poslužitelja. To je troznamenkasti cijeli broj. Prva znamenka označava klasu uvjeta. Kod odgovora obično slijedi izraz objašnjenja na engleskom jeziku, odvojen razmakom, koji osobi objašnjava razlog za ovaj konkretni odgovor.

    Klijent možda ne zna sve statusne kodove, ali je odgovornost klijenta da odgovori prema klasi koda. Trenutno se razlikuje pet klasa statusnih kodova:

      1xx: Informativni. Informacijski kodovi statusa koji obavještavaju klijenta da je poslužitelj u procesu obrade zahtjeva. Odgovor klijenta na ove kodove nije potreban;

      2xx: Uspjeh.

      1. 200 OK(Dobro). Uvedeno u HTTP / 1.0. Uspješan zahtjev za resursima. Ako je klijent zatražio bilo kakve podatke, oni se nalaze u zaglavlju i/ili tijelu poruke.

      3xx: Preusmjeravanje Kodovi klase 3xx govore klijentu da uputi još jedan zahtjev (obično na drugom URI-ju) kako bi uspješno dovršio operaciju. Iz ove klase pet kodova 301, 302, 303, 305 i 307 izravno se odnose na preusmjeravanja (preusmjeravanja). Poslužitelj specificira adresu na koju klijent treba uputiti zahtjev u zaglavlju Lokacija. Mnogi klijenti, prilikom preusmjeravanja s kodovima 301 i 302, pogrešno primjenjuju metodu GET na drugi resurs, unatoč činjenici da je prvi zahtjev bio s drugom metodom. Kako bi se izbjegli nesporazumi u verziji HTTP / 1.1, umjesto 302 uvedeni su kodovi 303 i 307. Metodu zahtjeva trebate promijeniti samo ako je poslužitelj odgovorio s 303. U drugim slučajevima, napravite sljedeći zahtjev s izvornom metodom.

      1. 302 Pronađeno(Pronađeno). Uvedeno u HTTP / 1.0. Traženi dokument je privremeno dostupan na drugom URI-ju navedenom u zaglavlju u polju Lokacija.

      4xx: Pogreška klijenta. 4xx klasa kodova namijenjena je za označavanje grešaka na strani klijenta. Kada koristi sve metode osim HEAD, poslužitelj mora vratiti hipertekstno objašnjenje korisniku u tijelu poruke.

      1. 404 nije pronađeno. Uvedeno u HTTP / 1.0. Poslužitelj je razumio zahtjev, ali nije pronašao odgovarajući resurs na navedenom URI-ju.

      5xx: Pogreška servera

    HTTP 1.1 Povezane veze

    HTTP / 2

    HTTP / 2 (izvorno HTTP / 2.0) je druga glavna verzija HTTP mrežnog protokola. Protokol se temelji na SPDY (HTTP Compatible Protocol koji je razvio Google).

    HTTP / 2 protokol je binarni. U usporedbi s prethodnim standardom, promijenjene su metode razbijanja podataka u fragmente i njihovog transporta između poslužitelja i klijenta.

    U HTTP/2 poslužitelj ima pravo slati sadržaj koji klijent još nije zatražio. To će omogućiti poslužitelju da odmah pošalje dodatne datoteke koje će preglednik trebati za prikaz stranica, bez potrebe da preglednik analizira glavnu stranicu i zatraži potrebne dodatke.

.) Zbog mogućnosti specificiranja načina kodiranja poruke, klijent i poslužitelj mogu razmjenjivati ​​binarne podatke, iako je ovaj protokol tekstualni.

Proxy poslužitelji

Povijest razvoja

HTTP / 0.9

Osim uobičajene GET metode, postoji i razlika. Uvjetni GET zahtjevi sadrže If-Modified-Since, If-Match, If-Range i slično. Djelomični GET-ovi sadrže raspon u zahtjevu. Redoslijed izvršenja takvih zahtjeva standardima je određen posebno.

GLAVA

Slično GET metodi, samo što nedostaje tijelo u odgovoru poslužitelja. Zahtjev HEAD se obično koristi za dohvaćanje metapodataka, provjeru postojanja resursa (provjera valjanosti URL-a) i za provjeru je li se promijenio od posljednjeg pristupa.

Zaglavlja odgovora mogu se spremiti u predmemoriju. Ako se metapodaci resursa ne podudaraju s odgovarajućim informacijama u predmemoriji, kopija resursa se označava kao zastarjela.

POST

Koristi se za prijenos korisničkih podataka na određeni resurs. Na primjer, na blogovima posjetitelji obično mogu unijeti svoje komentare na postove u HTML obrazac, nakon čega se postavljaju na poslužitelj i postavljaju na stranicu. U ovom slučaju, preneseni podaci (u primjeru s blogovima - tekst komentara) su uključeni u tijelo zahtjeva. Isto tako, korištenje POST metode obično prenosi datoteke na poslužitelj.

Za razliku od metode GET, metoda POST se ne smatra idempotentnom, odnosno ponavljanje istih POST zahtjeva više puta može vratiti različite rezultate (na primjer, nakon svakog slanja komentara, pojavit će se jedna kopija ovog komentara).

Ako je rezultat izvršenja 200 (U redu), poruka o rezultatu izvršenja zahtjeva treba biti uključena u tijelo odgovora. Ako je resurs stvoren, poslužitelj TREBA vratiti odgovor 201 (Stvoreno) s URI-jem novog resursa u zaglavlju Lokacija.

Poruka odgovora poslužitelja na metodu POST nije predmemorija.

STAVITI

Koristi se za preuzimanje sadržaja zahtjeva na URI naveden u zahtjevu. Ako resurs nije postojao na navedenom URI-ju, poslužitelj ga kreira i vraća status 201 (Stvoreno). Ako je resurs promijenjen, poslužitelj vraća 200 (U redu) ili 204 (Nema sadržaja). Poslužitelj NE SMIJE zanemariti nevažeća zaglavlja Content- * koja klijent šalje zajedno s porukom. Ako se bilo koje od ovih zaglavlja ne može prepoznati ili nije valjano pod trenutnim uvjetima, tada se mora vratiti kod pogreške 501 (nije implementirano).

Temeljna razlika između POST i PUT metoda je u razumijevanju svrhe URI-ja resursa. POST metoda pretpostavlja da će se sadržaj koji prenosi klijent obraditi na navedenom URI-ju. Koristeći PUT, klijent pretpostavlja da sadržaj koji se učitava odgovara resursu na danom URI-ju.

Poruke odgovora poslužitelja na metodu PUT ne spremaju se u predmemoriju.

ZAKRPA

Slično PUT-u, ali se odnosi samo na dio resursa.

IZBRISATI

Uklanja navedeni resurs.

TRAG

Vraća primljeni zahtjev tako da klijent može vidjeti koje informacije posredni poslužitelji dodaju ili mijenjaju u zahtjevu.

VEZA

Povezuje navedeni resurs s drugima.

PREKINI POVEZIVANJE

Uklanja povezanost navedenog resursa s drugima.

SPOJITI

Pretvara vezu zahtjeva u prozirni TCP/IP tunel, obično radi lakšeg uspostavljanja sigurne SSL veze putem nekriptiranog proxyja.

Statusni kodovi

Statusni kod dio je prvog retka odgovora poslužitelja. To je cijeli broj od tri arapske brojke. Prva znamenka označava klasu uvjeta. Kod odgovora obično slijedi izraz objašnjenja na engleskom jeziku, odvojen razmakom, koji osobi objašnjava razlog za ovaj konkretni odgovor. primjeri:

201 Izrađena web stranica 403 Pristup dopušten samo registriranim korisnicima 507 Nedovoljna pohrana

Klijent iz koda odgovora uči o rezultatima svog zahtjeva i određuje koje radnje treba poduzeti sljedeće. Skup statusnih kodova je standardan i opisan je u relevantnim RFC-ovima. Uvođenje novih kodova trebalo bi biti provedeno samo nakon konzultacija s IETF-om. Klijent možda ne zna sve statusne kodove, ali je odgovornost klijenta da odgovori prema klasi koda.

Trenutno postoji pet klasa statusnih kodova.

1xx Informativni (rus. Informativno)

Ova klasa sadrži kodove koji informiraju o procesu prijenosa. U HTTP / 1.0 poruke s takvim kodovima treba zanemariti. U HTTP / 1.1, klijent mora biti spreman prihvatiti ovu klasu poruke kao normalan odgovor, ali ne mora ništa slati poslužitelju. Same poruke s poslužitelja sadrže samo početni redak odgovora i, ako je potrebno, nekoliko polja zaglavlja specifičnih za odgovor. Proxy poslužitelji bi trebali slati takve poruke dalje od poslužitelja do klijenta.

2xx Uspjeh (rus. Uspjeh)

Poruke ove klase informiraju o slučajevima uspješnog prihvaćanja i obrade zahtjeva klijenta. Ovisno o statusu, poslužitelj također može prenijeti zaglavlja i tijelo poruke.

3xx preusmjeravanje (rus. Preusmjeravanje )

Kodovi klase 3xx obavještavaju klijenta da se mora podnijeti drugačiji zahtjev (obično na drugom URI-ju) kako bi se operacija uspješno dovršila. Iz ove klase pet kodova,,, i izravno se odnose na preusmjeravanja (preusmjeravanja). Poslužitelj specificira adresu na koju klijent treba uputiti zahtjev u zaglavlju Lokacija. To omogućuje korištenje fragmenata u ciljnom URI-ju.

4xx klijentska pogreška (rus. Pogreška klijenta)

4xx klasa kodova namijenjena je za označavanje grešaka na strani klijenta. Kada koristi sve metode osim HEAD, poslužitelj mora vratiti hipertekstno objašnjenje korisniku u tijelu poruke.

Za pamćenje vrijednosti kodova od 400 do 417 postoje tehnike ilustrativne mnemonike

5xx Pogreška poslužitelja (rus. pogreška servera)

5xx kodovi se dodjeljuju za slučajeve neuspješnog rada zbog greške poslužitelja. Za sve situacije osim korištenja metode HEAD, poslužitelj mora uključiti objašnjenje u tijelo poruke koju će klijent prikazati korisniku.

Naslovi

Tijelo poruke

Tijelo HTTP poruke (tijelo poruke), ako postoji, koristi se za prenošenje tijela objekta povezanog sa zahtjevom ili odgovorom. Tijelo poruke razlikuje se od tijela entiteta samo kada se primjenjuje kodiranje prijenosa, kao što je naznačeno poljem zaglavlja Transfer-Encoding.

Tijelo poruke = tijelo entiteta |

Polje Transfer-Encoding MORA se koristiti za označavanje bilo kakvog kodiranja prijenosa koje primjenjuje aplikacija kako bi se osigurao siguran i ispravan prijenos poruke. Polje Transfer-Encoding svojstvo je poruke, a ne objekta, i stoga ga može dodati ili ukloniti bilo koja aplikacija u lancu zahtjeva/odgovora.

Pravila koja reguliraju valjanost tijela poruke u poruci različita su za zahtjeve i odgovore.

Prisutnost tijela poruke u zahtjevu označava se dodavanjem polja zaglavlja Content-Length ili Transfer-Encoding u zaglavlja zahtjeva. Tijelo poruke MOŽE se dodati zahtjevu samo kada metoda zahtjeva prihvati tijelo entiteta.

Hoće li tijelo poruke biti uključeno u poruku odgovora ovisi i o metodi zahtjeva i o statusnom kodu odgovora. Svi odgovori na zahtjev s metodom HEAD MORAJU sadržavati tijelo poruke, čak i ako su polja zaglavlja entiteta prisutna kako biste vjerovali da je entitet prisutan. Svi odgovori sa statusnim kodovima 1xx (Informativni), 204 (Bez sadržaja) i 304 (Nije izmijenjeno) sadržavat će tijelo poruke. Svi ostali odgovori sadrže tijelo poruke, čak i ako je nulte duljine.

Primjeri HTTP dijaloga

Normalan GET zahtjev

Postoje dvije glavne vrste odobrenja:

  • Upravlja poslužiteljem (eng. Pokrenut poslužiteljem).
  • Upravlja klijentom (eng. Agent-driven).

Obje vrste mogu se koristiti u isto vrijeme ili svaki od njih zasebno.

Glavna specifikacija protokola (RFC 2616) također ističe takozvano transparentno pregovaranje (eng. Transparentno pregovaranje) kao poželjna kombinacija obje vrste. Potonji mehanizam ne treba miješati s nezavisnom tehnologijom Transparent Content Negotiation (TCN, rus. Transparentno pregovaranje o sadržaju , vidi RFC 2295), koji nije dio HTTP protokola, ali se može koristiti s njim. I jedni i drugi imaju značajne razlike u principu rada i samom značenju riječi "transparentno" (transparentno). U HTTP specifikaciji transparentnost znači da je proces nevidljiv klijentu i poslužitelju, a u TCN tehnologiji transparentnost znači dostupnost cjelovitog popisa opcija resursa za sve sudionike u procesu dostave podataka.

Poslužitelj upravlja

Ako postoji više verzija resursa, poslužitelj može analizirati zaglavlja zahtjeva klijenta kako bi vratio ono što misli da je najprikladnije. Glavne analize su zaglavlja Accept, Accept-Charset, Accept-Encoding, Accept-Languages ​​i User-Agent. Poželjno je da poslužitelj u odgovor uključi zaglavlje Vary, naznačujući parametre po kojima se sadržaj razlikuje po traženom URI-ju.

Geografski položaj klijenta može se odrediti udaljenom IP adresom. To je moguće zbog činjenice da su IP adrese, poput naziva domena, registrirane za određenu osobu ili organizaciju. Prilikom registracije naznačuje se regija u kojoj će se koristiti željeni adresni prostor. Ti su podaci javno dostupni, a na Internetu možete pronaći odgovarajuće slobodno distribuirane baze podataka i gotove softverske module za rad s njima (treba se usredotočiti na ključne riječi "Geo IP").

Treba imati na umu da ova metoda može odrediti lokaciju što je više moguće s točnošću grada (dakle se određuje zemlja). U ovom slučaju, informacije su relevantne samo u trenutku registracije adresnog prostora. Na primjer, ako moskovski davatelj usluga registrira niz adresa koje označavaju Moskvu i počne pružati pristup korisnicima iz najbliže moskovske regije, tada njegovi pretplatnici na nekim stranicama mogu primijetiti da su iz Moskve, a ne iz Krasnogorska ili Dzeržinskog.

Pregovaranje vođeno poslužiteljem ima nekoliko nedostataka:

  • Poslužitelj samo pretpostavlja koja je opcija najpoželjnija za krajnjeg korisnika, ali ne može znati što je točno potrebno u ovom trenutku (na primjer, verzija na ruskom ili engleskom).
  • Postoji mnogo zaglavlja grupe Prihvati, ali malo resursa s više opcija. Kao rezultat toga, oprema je preopterećena.
  • Zajednička predmemorija stvara ograničenje u mogućnosti izdavanja istog odgovora na identične zahtjeve različitih korisnika.
  • Dodavanje zaglavlja Accept također može otkriti neke informacije o njegovim preferencijama, kao što su jezici koji se koriste, preglednik, kodiranje.

Prateći želje kupaca

U ovom slučaju, tip sadržaja definiran je samo na strani klijenta. Da bi to učinio, poslužitelj vraća sa statusnim kodom 300 (višestruki izbori) ili 406 (nije prihvatljivo) popis opcija, među kojima korisnik odabire odgovarajuću. Pregovaranje vođeno klijentom dobro je kada se sadržaj razlikuje u najčešćim parametrima (na primjer, jezik i kodiranje) i kada se koristi javna predmemorija.

Glavni nedostatak je dodatno opterećenje, jer morate napraviti dodatni zahtjev da biste dobili željeni sadržaj.

Transparentno odobrenje

Ovo pregovaranje je potpuno transparentno za klijenta i poslužitelja. U ovom slučaju koristi se zajednička predmemorija koja sadrži popis opcija kao za pregovaranje koje vodi klijent. Ako predmemorija razumije sve ove opcije, onda sama donosi izbor, kao u pregovaranju vođenom poslužiteljem. To smanjuje opterećenje izvornog poslužitelja i eliminira dodatni zahtjev od klijenta.

Temeljna HTTP specifikacija ne opisuje transparentni mehanizam pregovaranja.

Višestruki sadržaj

HTTP protokol podržava prijenos više entiteta unutar jedne poruke. Štoviše, entiteti se mogu prenijeti ne samo u obliku jednorazinskog niza, već i u obliku hijerarhije s ugniježđenjem elemenata jedan u drugi. Multipart / * vrste medija koriste se za označavanje više sadržaja. Rad s takvim tipovima provodi se u skladu s općim pravilima opisanim u RFC 2046 (osim ako nije drugačije određeno za specifičnu vrstu medija). Ako primatelj ne zna raditi s tipom, onda ga tretira na isti način kao višedijelni/mješoviti.

Granični parametar označava razdjelnik između različitih vrsta poslanih poruka. Na primjer, parametar DestAddress proslijeđen iz obrasca prosljeđuje vrijednost adrese e-pošte, a sljedeći element AttachedFile1 šalje binarni sadržaj slike u .jpg formatu

Sa strane poslužitelja može se poslati više poruka sadržaja kao odgovor na više zatraženih dijelova resursa. U ovom slučaju koristi se tip medija multipart / byteranges.

Na strani klijenta, prilikom slanja HTML obrasca najčešće se koristi POST metoda. Tipičan primjer: slanje stranica e-pošte s privitcima datoteka. Prilikom slanja takvog pisma preglednik generira poruku tipa multipart / form-data, integrirajući se u nju kao zasebne dijelove koje je unio korisnik, predmet pisma, adresu primatelja, sam tekst i priložene datoteke:

POST /send-message.html HTTP / 1.1 Host: mail.example.com Referent: http://mail.example.com/send-message.html User-Agent: BrowserForDummies / 4.67b Content-Type: multipart / form- podaci; boundary = "Asrf456BGe4h" Dužina sadržaja: (ukupna veličina, uključujući podređena zaglavlja) Veza: održavaj-živ drži-živ: 300 (prazan red) (nedostaje preambula) --Asrf456BGe4h Dispozicija sadržaja: obrazac-podaci; naziv = "Odredište" (prazan red) [e-mail zaštićen]--Asrf456BGe4h Dispozicija sadržaja: obrazac-podaci; name = "MessageTitle" (prazan red) Ogorčen sam --Asrf456BGe4h Sadržaj-Disposition: obrazac-podaci; name = "Tekst poruke" (prazan red) Pozdrav Vasily! Tvoj pitomi lav kojeg si ostavio sa mnom prošli tjedan razderao mi je cijeli kauč. Molim vas vratite ga uskoro! U prilogu su dvije slike s posljedicama. --Asrf456BGe4h Dispozicija sadržaja: obrazac-podaci; name = "Priložena datoteka1"; naziv datoteke = "horror-photo-1.jpg" Vrsta sadržaja: slika / jpeg (prazan red) (binarni sadržaj prve fotografije) --Asrf456BGe4h Dispozicija sadržaja: obrazac-podaci; name = "Priložena datoteka2"; naziv datoteke = "horror-photo-2.jpg" Vrsta sadržaja: slika / jpeg (prazan red) (binarni sadržaj druge fotografije) --Asrf456BGe4h-- (nedostaje epilog)

U primjeru, u zaglavljima Content-Disposition, parametar name odgovara atributu name u HTML oznakama i