Hva er Http-overskrifter. Generell teori. Viser http-overskrifter. Livehttpheaders for Mozilla Firefox

Så, etter å ha mestret materialet presentert på dette nettstedet, og etter å ha utført uavhengige forsøk på å lære HTML og CSS bør du være i stand til å lage nettsider med innledende og nesten initial kompleksitet. Men jeg tror det er viktig ikke bare å kunne utføre de tildelte oppgavene, men også å forstå hvordan løsningene dine fungerer på alle nivåer i organisasjonen. Et verktøy for å se HTTP-hodene som sendes av nettleseren din til webserveren og omvendt vil hjelpe deg å komme nærmere dette.

I artikkelen ovenfor, i tillegg til teoretisk informasjon, var det også lister over HTTP-hoder som ble brukt av nettleseren når du sendte en forespørsel. hjemmeside nettstedet ya.ru og inneholdt i svaret fra webserveren på den tilsvarende forespørselen. Men det er mye mer interessant (og mer nyttig) å se hvordan serveren din svarer på forespørsler fra nettleseren på sidene dine. Senere, når du lager "smarte" HTML-sider, vil dette bli nøkkelen til å forstå prinsippene for aktiv interaksjon mellom brukeren og nettstedet.

Som et verktøy for å se HTTP-overskrifter, foreslår jeg at du bruker plugin-en til nettleseren Firefox LiveHTTPHeaders... Du kan installere det slik: Verktøy - Tillegg - Søk etter tillegg, søk etter ordet "headers", installer LiveHTTPHeaders. Etter å ha startet nettleseren på nytt, vil du se ny funksjon: Verktøy - Vis HTTP-overskrifter.

Jeg foreslår at du prøver ut plugin-en på siden opprettet i forrige leksjon. Åpne vinduet "Se HTTP-overskrifter", klikk "tøm" for å fjerne overskriftene som vises (når du ber om nettleserens hjemmeside, osv.). Deretter lager vi en sideforespørsel, for eksempel http: // test-domene2 /. Overskrifter fra nettleserforespørsler og nettserversvar dukket opp i overskriftsvinduet:

Posten består av tre blokker: Først går URL-en til den forespurte siden, deretter, gjennom en tom linje, HTTP-hodene funnet i HTTP-forespørselen for denne siden, og til slutt HTTP-hodene som finnes i HTTP-svaret på nettet server. Oppføringene er atskilt med linjer.

For å danne en nettside, sender nettleseren flere forespørsler til webserveren: direkte til sidekoden, CSS-stilfiler, bilder osv. Alle disse forespørslene gjenspeiles i skjemaet. Den første er forespørselen om HTML-siden:

GET / HTTP / 1.1 Vert: test-domene2 Brukeragent: Mozilla / 5.0 (Windows; U; Windows NT 5.1; ru; rv: 1.9.2) Gecko / 20100115 Firefox / 3.6 Godta: tekst / html, applikasjon / xhtml + xml, application / xml; q = 0,9, * / *; q = 0,8 Accept-Language: ru, en-us; q = 0,7, en; q = 0,3 Accept-Encoding: gzip, deflate Accept-Charset: windows-1251 , utf-8; q = 0,7, *; q = 0,7 Keep-Alive: 115 Tilkobling: keep-alive Pragma: no-cache Cache-Control: no-cache

som serveren svarte til:

HTTP / 1.1 200 OK Dato: fre, 04. jun. 2010 08:52:09 GMT Server: Apache Sist endret: ons, 26. mai 2010 11:34:58 GMT Etag: "3000000002878-20ca-481777da: Accepted-481777dae" Content-Length: 8394 Keep-Alive: timeout = 5, maks = 100 Tilkobling: Keep-Alive Content-Type: tekst / html; tegnsett = UTF-8

I overskriften til HTTP-svaret kan du se navnet på webserveren, sidestørrelsen i byte og kodingen. Som en påminnelse viser plugin-en HTTP-hoder som er en del av HTTP-pakken. Den andre delen er selve pakken, den vises ikke. Men alt er enkelt her: regelmessige forespørsler sider / filer har ikke en body i pakken (og vi vil lære om uvanlige senere), og kroppen i svaret representerer innholdet på den forespurte siden / filen, som nettleseren mottar.

Enten du er programmerer eller ikke, har du sett ham over hele Internett. På dette øyeblikket noe som starter med "http: //" vises i nettleserens adresselinje. Til og med ditt første Hello World-skript sendte en HTTP-header uten at du forsto det. I denne artikkelen skal vi lære om det grunnleggende om HTTP-hoder og hvordan de kan brukes i våre nettapplikasjoner.

Hva er HTTP-hoder?

HTTP står for Hypertext Transfer Protocol. Verdensveven bruker denne protokollen. Den ble opprettet på begynnelsen av 1990-tallet. Nesten alt du ser i nettleseren din blir overført til datamaskinen din via HTTP. For eksempel, da du åpnet siden for denne artikkelen, sendte nettleseren din over 40 HTTP-forespørsler og mottok HTTP-svar for hver enkelt.

HTTP-hoder er hoveddelen av disse HTTP-forespørslene og -svarene, og de inneholder informasjon om klientens nettleser, den forespurte siden, serveren og mer.

Eksempel

Når du skriver inn en URL i adressefeltet, sender nettleseren din en HTTP-forespørsel, og den kan se slik ut:

GET / tutorials / other / top-20-mysql-best-practices / HTTP / 1.1 Host: net.tutsplus.com User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 6.1; en-US; rv: 1.9. 1.5) Gecko / 20091102 Firefox / 3.5.5 (.NET CLR 3.5.30729) Godta: tekst / html, applikasjon / xhtml + xml, applikasjon / xml; q = 0.9, * / *; q = 0.8 Accept-Language: en -us, en; q = 0,5 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7 Keep-alive: 300 Tilkobling: keep-alive Cookie: PHPSESSID = r2t5uvjq435r4q7ib3vtdjq120 Pragma: no-cache Cache-Control: no-cache

Den første linjen er "Request Line" som inneholder litt grunnleggende informasjon om forespørselen. Resten er HTTP-hoder.

Etter denne forespørselen mottar nettleseren din et HTTP-svar som kan se slik ut:

HTTP / 1.x 200 OK Overføringskoding: chunked Dato: Sat, 28 Nov 2009 04:36:25 GMT Server: LiteSpeed ​​​​Connection: Lukk X-Powered-By: W3 Total Cache / 0.8 Pragma: offentlig Utløper: Lør. , 28. nov. 2009 05:36:25 GMT Etag: "pub1259380237; gz" Cache-kontroll: maks-alder = 3600, offentlig innhold-type: tekst / html; charset = UTF-8 Sist endret: Sat, 28 Nov 2009 03:50:37 GMT X-Pingback: http://net.tutsplus.com/xmlrpc.php Content-Encoding: gzip Vari: Accept-Encoding, Cookie, Bruker agent Topp 20+ MySQL beste praksis - Nettuts +

Den første linjen er "Status Bar" etterfulgt av "HTTP Headers" til en tom linje. Etter det begynner "innholdet" (i i dette tilfellet- HTML-utdata).

Når du ser på kilde nettsider i nettleseren din, ser du bare del av HTML i stedet for HTTP-hoder, selv om de faktisk ble overført sammen.

Disse HTTP-forespørslene sendes og mottas også for andre ting som bilder, CSS-filer, JavaScript-filer osv. Dette er grunnen til at jeg sa tidligere at nettleseren din har sendt minst 40 eller flere HTTP-forespørsler siden du kun lastet ned denne artikkelsiden.

La oss nå se på strukturen mer detaljert.

Slik ser du HTTP-hoder

For å analysere HTTP-hoder bruker jeg følgende Firefox-utvidelser:

HTTP-hoder i HTTP-forespørsler

Vi skal nå ta en titt på noen av de mer vanlige HTTP-hodene som finnes i HTTP-forespørsler.

Nesten alle disse overskriftene kan finnes i $ _SERVER-arrayen i PHP. Du kan også bruke funksjonen getallheaders () for å hente alle overskrifter samtidig.

Vert

En HTTP-forespørsel sendes til bestemte IP-adresser. Men siden de fleste servere er i stand til å være vert for flere nettsteder under samme IP, må de vite hvilke Domenenavn ser etter en nettleser.

Vert: net.tutsplus.com

Dette er i utgangspunktet vertsnavnet, inkludert domenet og underdomenet.

I PHP kan den bli funnet som $ _SERVER ["HTTP_HOST"] eller $ _SERVER ["SERVER_NAME"].

Bruker agent

Brukeragent: Mozilla / 5.0 (Windows; U; Windows NT 6.1; en-US; rv: 1.9.1.5) Gecko / 20091102 Firefox / 3.5.5 (.NET CLR 3.5.30729)

Denne overskriften kan inneholde flere opplysninger, for eksempel:

  • Nettlesernavn og versjon.
  • Navn og versjon operativsystem.
  • Standardspråk.

Dette er hvordan nettsteder kan samle visse generell informasjon om deres surfersystemer. For eksempel kan de finne ut om en surfer bruker mobil nettleser og omdirigerer dem til mobilversjon nettsiden deres, som gir bedre resultater ved lav oppløsning.

I PHP kan det uttrykkes slik: $ _SERVER ["HTTP_USER_AGENT"].

If (strstr ($ _ SERVER ["HTTP_USER_AGENT"], "MSIE 6")) (ekko "Vennligst slutt å bruke IE6!";)

Accept-Language

Accept-Language: en-us, en; q = 0,5

Denne overskriften viser standard språkinnstillinger. Hvis nettstedet har forskjellige språkversjoner, kan det omdirigere en ny surfer basert på disse dataene.

I PHP kan den bli funnet slik: $ _SERVER ["HTTP_ACCEPT_LANGUAGE"].

If (substr ($ _ SERVER ["HTTP_ACCEPT_LANGUAGE")], 0, 2) == "fr") (header ("Plassering: http://french.mydomain.com");)

Godta-koding

Godta-koding: gzip, deflate

De fleste moderne nettlesere støtter gzip og sender dette i overskriften. Nettserveren kan da sende utdata-HTML-koden i et komprimert format. Dette kan redusere størrelsen med opptil 80 % for å spare båndbredde og tid.

I PHP kan den bli funnet slik: $ _SERVER ["HTTP_ACCEPT_ENCODING"]. Men når du bruker funksjonen Ring tilbake ob_gzhandler (), vil den sjekke verdien automatisk, så du trenger ikke det.

// aktiverer utdatabuffring // og all utdata komprimeres hvis nettleseren støtter det ob_start ("ob_gzhandler");

Hvis-modifisert-siden

Hvis et nettdokument allerede er bufret i nettleseren din og du besøker det igjen, kan nettleseren sjekke om dokumentet er oppdatert ved å sende følgende:

Hvis den ikke har endret seg siden den datoen, sender serveren en 304 Ikke endret svarkode, men innholdet gjør det ikke, og nettleseren laster ned innholdet fra hurtigbufferen.

I PHP kan den bli funnet slik: $ _SERVER ["HTTP_IF_MODIFIED_SINCE"].

// anta at $ last_modify_time var den siste utdataene ble oppdatert // sendte nettleseren If-Modified-Since header? if (isset ($ _ SERVER ["HTTP_IF_MODIFIED_SINCE")) (// hvis nettleserens hurtigbuffer samsvarer med endringstiden if ($ last_modify_time == strtotime ($ _ SERVER ["HTTP_IF_MODIFIED_SINCE"))) (// send en 304-header , og ingen innholdsoverskrift ("HTTP / 1.1 304 ikke endret"); exit;))

Det er også en Etag HTTP-header som kan brukes til å sjekke gjeldende cache... Vi vil snakke om dette snart.

Kjeks

Som navnet tilsier sender dette informasjonskapsler lagret i nettleseren din for det domenet.

Informasjonskapsel: PHPSESSID = r2t5uvjq435r4q7ib3vtdjq120; foo = bar

Disse er navn = verdipar, atskilt med semikolon. Informasjonskapsler kan også inneholde økt-ID.

I PHP individuelle informasjonskapsler kan nås ved å bruke $ _COOKIE-matrisen. Du kan få tilgang til øktvariabler direkte ved å bruke $ _SESSION-matrisen, og hvis du trenger økt-ID-en kan du bruke session_id ()-funksjonen i stedet for informasjonskapselen.

Ekko $ _COOKIE ["foo"]; // output: bar echo $ _COOKIE ["PHPSESSID"]; // utgang: r2t5uvjq435r4q7ib3vtdjq120 session_start (); echo session_id (); // utgang: r2t5uvjq435r4q7ib3vtdjq120

Henviser

Som navnet antyder, inneholder denne HTTP-overskriften lenke-url.

For eksempel hvis jeg gikk til hjemmeside Nettuts + og klikket på artikkellenken, vil denne overskriften bli sendt til nettleseren min:

Henviser: http://net.tutsplus.com/

I PHP kan den bli funnet som $ _SERVER ["HTTP_REFERER"].

If (isset ($ _ SERVER ["HTTP_REFERER")) ($ url_info = parse_url ($ _ SERVER ["HTTP_REFERER"]); // kommer surferen fra Google? If ($ url_info ["host"] == "www .google.com ") (parse_str ($ url_info [" query "], $ vars); echo" Du søkte på Google etter dette søkeordet: ". $ vars [" q "];)) // hvis refererende url var: // http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http+headers&aq=f&oq=&aqi=g-p1g9 // utdataene vil være: // Du søkte på Google for dette søkeordet: http-overskrifter

Du har kanskje lagt merke til at ordet "henviser" er feilstavet som "henviser". Dessverre forvandlet den seg til den offisielle HTTP-spesifikasjonen på lignende måte og ble sittende fast.

Autorisasjon

Autorisasjon: Grunnleggende bXl1c2VyOm15cGFzcw ==

Dataene inne i overskriften er base64-kodet. For eksempel vil base64_decode ("bXl1c2VyOm15cGFzcw ==") returnere "myuser: mypass"

I PHP kan disse verdiene finnes som $ _SERVER ["PHP_AUTH_USER"] og $ _SERVER ["PHP_AUTH_PW"].

Mer om dette når vi snakker om WWW-Authenticate-overskriften.

HTTP-hoder i HTTP-svar

Vi skal nå ta en titt på noen av de mer vanlige HTTP-hodene som finnes i HTTP-svar.

I PHP kan du angi svarhoder ved å bruke header ()-funksjonen. PHP sender allerede visse overskrifter automatisk for å laste innhold og sette informasjonskapsler og sånt ... Du kan se overskriftene som sendes eller vil bli sendt ved å bruke headers_list () funksjonen. Du kan sjekke om overskriftene allerede er sendt ved å bruke headers_sent ()-funksjonen.

Cache-kontroll

Definisjon fra w3.org: "Cache-Control header-feltet brukes til å spesifisere direktiver som MÅ utføres av alle hurtigbuffermekanismer langs forespørsel-/svarkjeden." Disse "bufringsmekanismene" inkluderer gatewayer og proxyer som Internett-leverandøren din kan bruke.

Cache-kontroll: maks-alder = 3600, offentlig

"offentlig" betyr at svaret kan bufres av hvem som helst. "max-age" indikerer hvor mange sekunder cachen er gyldig. Å tillate at nettstedet ditt bufres kan redusere serverbelastningen og gjennomstrømning og øker også lastetiden i nettleseren.

Caching kan også forhindres med "no-cache"-direktivet.

Cache-kontroll: ingen cache

Innholdstype

Denne overskriften indikerer "mime-typen" til dokumentet. Nettleseren bestemmer så hvordan innholdet skal tolkes basert på dette. For eksempel, html-side(eller PHP-skript med html-utdata) kan returnere dette:

Innholdstype: tekst / html; tegnsett = UTF-8

"tekst" er typen og "html" er undertypen til dokumentet. Overskriften kan også inneholde mer informasjon som tegnsett.

For et gif-bilde kan dette legges ut.

Innholdstype: bilde / gif

Nettleseren kan bruke ekstern applikasjon eller en nettleserutvidelse basert på mime-type. For eksempel vil dette laste Adobe Reader:

Innholdstype: applikasjon / pdf

Når du laster direkte, kan Apache vanligvis oppdage dokumentets mime-type og sende den riktige overskriften. Dessuten har de fleste nettlesere en viss grad av feiltoleranse og autodeteksjon. mimetyper hvis overskrifter er feil eller mangler.

Du kan finne listen vanlige typer mime.

I PHP kan du bruke finfo_file ()-funksjonen for å bestemme mime-typen til en fil.

Innhold-Disposisjon

Denne overskriften forteller nettleseren å åpne et filnedlastingsvindu i stedet for å prøve å analysere innholdet. Eksempel:

Innhold-Disposisjon: vedlegg; filnavn = "nedlasting.zip"

Dette vil tvinge nettleseren til å gjøre dette:

Merk at den tilsvarende Content-Type-overskriften også må sendes sammen med denne:

Innhold-Type: applikasjon / zip Innhold-Disposisjon: vedlegg; filnavn = "nedlasting.zip"

Innhold-lengde

Når innholdet blir servert til nettleseren, kan serveren angi størrelsen (i byte) ved å bruke denne overskriften.

Innholdslengde: 89123

Dette er spesielt nyttig når du laster opp filer. Slik kan nettleseren bestemme fremdriften for nedlastingen.

For eksempel, her er et mock script jeg skrev som simulerer langsom lasting.

// det er en zip-filoverskrift (" Content-Type: application / zip "); // 1 million byte (ca. 1 megabyte) header (" Content-Length: 1000000 "); // last ned en nedlastingsdialog, og lagre den som download.zip-header ("Innhold-Disposisjon: vedlegg; filnavn =" download.zip ""); // 1000 ganger 1000 byte med data for ($ i = 0; $ i< 1000; $i++) { echo str_repeat(".",1000); // sleep to slow down the download usleep(50000); }

Her er resultatet:

Nå skal jeg kommentere innholdslengde-overskriften

// det "er en zip-filoverskrift (" Content-Type: application / zip "); // nettleseren vil" ikke vite størrelsen // header ("Innhold-Length: 1000000"); // last ned en nedlastingsdialog, og lagre den som download.zip-header ("Innhold-Disposisjon: vedlegg; filnavn =" download.zip ""); // 1000 ganger 1000 byte med data for ($ i = 0; $ i< 1000; $i++) { echo str_repeat(".",1000); // sleep to slow down the download usleep(50000); }

Nå er resultatet slik:

Nettleseren kan bare fortelle hvor mange byte som er lastet ned, men den vet ikke totale mengden... Og fremdriftslinjen viser ikke fremgang.

Etag

Dette er en annen header som brukes til caching. Det ser slik ut:

Etag: "pub1259380237; gz"

Nettserveren kan sende denne overskriften med hvert dokument den serverer. Verdien kan være basert på siste endringsdato, filstørrelse eller til og med sjekksum fil. Nettleseren lagrer deretter denne verdien mens den cacher dokumentet. Neste gang nettleseren ber om den samme filen, sender den denne i en HTTP-forespørsel:

If-None-Match: "pub1259380237; gz"

Hvis Etag-en til dokumentet samsvarer med dette, vil serveren sende 304 i stedet for 200, og ikke noe innhold. Nettleseren vil laste inn innholdet fra hurtigbufferen.

Sist endret

Som navnet antyder, indikerer denne overskriften datoen siste endring dokument i GMT-format:

Sist endret: Sat, 28 Nov 2009 03:50:37 GMT $ modify_time = filemtime ($ fil); header ("Sist endret:". gmdate ("D, d M Y H: i: s", $ modify_time). "GMT");

Dette gir nettleseren en annen måte å bufre dokumentet på. Nettleseren kan sende dette i en HTTP-forespørsel:

Vi snakket om dette tidligere i delen "Hvis-modifisert-siden".

plassering

Denne overskriften brukes til omdirigering. Hvis svarkoden er 301 eller 302, bør serveren også sende denne overskriften. For eksempel, når du går til http://www.nettuts.com, vil nettleseren din motta følgende:

HTTP / 1.x 301 flyttet permanent ... Sted: http://net.tutsplus.com/ ...

I PHP kan du omdirigere surferen slik:

Header ("Sted: http://net.tutsplus.com/");

Som standard vil dette sende en 302-svarkode. Hvis du vil sende i stedet for 301:

Header ("Sted: http://net.tutsplus.com/", true, 301);

Sett-Cookie

Når et nettsted ønsker å sette eller oppdatere en informasjonskapsel i nettleseren din, vil den bruke denne overskriften.

Set-Cookie: skin = noskin; bane = /; domene = .amazon.com; utløper = Søn, 29-Nov-2009 21:42:28 GMT Set-Cookie: session-id = 120-7333518-8165026; bane = /; domene = .amazon.com; utløper = Lør 27. februar 08:00:00 2010 GMT

Hver informasjonskapsel sendes som en egen overskrift. Vær oppmerksom på at informasjonskapsler installert med bruker JavaScript ikke gå gjennom HTTP-hoder.

I PHP kan du sette informasjonskapsler ved å bruke funksjonen setcookie (), og PHP sender de riktige HTTP-hodene.

Setcookie ("TestCookie", "foobar");

Noe som resulterer i at denne overskriften blir sendt:

Set-Cookie: TestCookie = foobar

Hvis ingen utløpsdato er oppgitt, slettes informasjonskapselen når nettleservinduet lukkes.

WWW-Autentiser

Nettstedet kan sende denne overskriften for å autentisere brukeren over HTTP. Når nettleseren ser denne overskriften, vil den åpne en påloggingsdialog.

WWW-Authenticate: Basic realm = "Restricted Area"

Som vil se slik ut:

  • Oversettelse

Historisk sett har Firefox hatt stor popularitet blant nettutviklere på grunn av dens utvidbarhet ved å koble til alle typer plugins og tillegg skrevet tredjeparts utviklere... Ideen om å separere funksjonalitet i utvidelser gjorde det mulig å løse mange forskjellige oppgaver rett i nettleseren, uten å ty til eksterne verktøy.

Selvfølgelig, i denne listen vil du sikkert finne allerede kjente utvidelser, men et stort lag nyttige utvidelser holder seg alltid på sidelinjen. Så gjør deg klar til å installere et par utvidelser til! :)

Innebygde utviklingsverktøy i Firefox

Før du starter listen, ville det være feil å ikke nevne verktøyene som allerede er innebygd i Firefox. Her snakker vi om selve utviklingsverktøyene i Firefox Aurora 10 og funksjonaliteten som finnes i enhver moderne nettleser i dag.

Ved utvikling av grensesnittet til disse verktøyene har mange tilnærminger og løsninger blitt prøvd. Resultatet er et ganske fint grensesnitt som alle kan prøve ved å installere Firefox Aurora (hmm, har du ikke installert det ennå?)

Vel, under kuttet finner du en enorm liste over utvidelser, som definitivt vil være nyttig for enhver webutvikler.

Firebug

Denne utvidelsen er null i listen over utvidelser. Firebug har satt standarden for utviklingsverktøy på tvers av alle nettlesere. Vanligvis brukt for live CSS og HTML-redigering, JavaScript-feilsøking og optimalisering av sideinnlasting. Noen av utvidelsene nevnt nedenfor er basert på Firebug, så vi kommer tilbake til denne utvidelsen.

Bare i tilfelle, la meg minne deg på at Firebug er ganske minnekrevende, så ikke glem å deaktivere det (eller rett og slett ikke aktivere det) på de nettstedene du ikke jobber med.

Standard Firefox-utvidelser for webutviklere

Mange utvidelser har blitt utviklet gjennom årene for å få mest mulig ut av Firefox. Noen av dem er populære, andre vil du sannsynligvis se for første gang. Hvis du bruker en utvidelse som ikke er nevnt her, skriv i kommentarfeltet!

SeoQuake SEO

Seoquake-utvidelsen hjelper deg med å optimalisere nettstedet ditt for søkemotorer og sosiale nettverk.

Vis IP

Viser IP-adresse(r) nåværende side på statuslinjen. Høyreklikk vil også vise vertsnavnet, informasjon fra hois, netcraft, etc. Du kan også kopiere IP-adressen dit.

Stilig

Endring av stilark for nettsteder. Stilig, som GreaseMonkey, har et stort depot av temaer for nettsteder som Google, YouTube, Tumblr og andre.

Tamper data

Utvidelse for å vise og endre HTTP / HTTPS-hoder og POST-parametere.

Total validator

Samtidig sidevalidering av flere validatorer. Fungerer med eksterne og interne sider, samt enkelt med lokale sider.

I denne artikkelen skal vi se på hva overskrifter er for, uten å gå inn på detaljer, hvem som er ansvarlig for hva. En beskrivelse av rollene til de vanligste overskriftene vil bli gitt i de følgende artiklene.

Alle artikler fra syklusen:

  • Hva er Http-overskrifter. Generell teori.

HTTP står for Hypertekstoverføring Protokoll (Hypertext Transfer Protocol). En protokoll er et sett med regler som forskjellige enheter utveksle data. Den ble opprettet på 1990-tallet. Nå brukes den nesten overalt på Internett. Alt du ser i nettleservinduet ble mottatt gjennom denne protokollen. http-hoder er kanskje det viktigste i kommunikasjon mellom enheter. De formidler grunnleggende informasjon om den etablerte forbindelsen og om overført informasjon gjennom denne forbindelsen.
La oss ta en titt på kommunikasjonsdiagrammet for de to enhetene. La disse enhetene være datamaskinen din og en server på Internett:

Som du kan se, sendte nettleseren en http-forespørsel. Det kan se noe slikt ut:

GET / other-19 HTTP / 1.1 Vert: www.scriptsite.ru Brukeragent: Mozilla / 5.0 (Windows; U; Windows NT 6.0; ru; rv: 1.9.1.5) Gecko / 20091102 Firefox / 3.5.5 (.NET CLR 3.5.30729) Godta: tekst / html, applikasjon / xhtml + xml, applikasjon / xml; q = 0.9, * / *; q = 0.8 Accept-Language: ru, en-us; q = 0.7, en; q = 0.3 Accept-Encoding: gzip, deflate Accept-Charset: windows-1251, utf-8; q = 0.7, *; q = 0.7 Keep-Alive: 300 Tilkobling: keep-alive

I dette tilfellet er den første linjen forespørselslinjen, alle andre linjer er http-hodene som har Ytterligere informasjon om forespørselen, om klienten som ber om denne informasjonen, om mange andre ting.
Som svar på vår forespørsel kan serveren sende følgende overskrifter:

Server: Apache / 2.0.61 (Unix) mod_ssl / 2.0.61 OpenSSL / 0.9.8k mod_dp20 / 0.99.2 PHP / 5.2.5 mod_python / 3.3.1 Python / 2.5.1 mod_ruby / 1.2.6 Ruby. (2007-09-24)

X-Powered-By: PHP / 5.2.5

Set-Cookie: PHPSESSID = ft47gokfee6amv3eda3k1p93s3; sti = /

Cache-Control: no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0

Pragma: ingen cache

Keep-Alive: tidsavbrudd = 10, maks = 1024

Tilkobling: Keep-Alive

Overføringskoding: biter

Innholdstype: tekst / html

Den første linjen er statuslinjen. Resten av linjene er overskrifter. I diagrammet ble det vist at innholdet på siden også er lastet. Men dette innholdet er vanligvis ikke vanlig å vise i plugins som viser overskrifter. Og innholdet på siden er bare et spesielt tilfelle. Etter protokollen trenger ikke siden å overføres. I stedet for det, både et bilde og et lydfil, og video. Og alle vil ha svært forskjellige titler.

Hvordan kan jeg se http-overskriftene?

For å se http-overskriftene anbefaler jeg følgende Firefox nettleserplugins:

Hvis du bruker Chrome-nettleser, kan du se all informasjonen ved å klikke på innstillingsknappen - verktøy - utviklerverktøy. Nettverk-fanen.
Jeg kan ikke gi råd til brukere av opera-nettleseren, fordi jeg ikke er venn med denne nettleseren. Med plugins installert og kjører, prøv å oppdatere siden. Du vil umiddelbart se enorme lister over forespørsler og svar som nettleseren din kommuniserte med serveren gjennom.

Http-overskrifter og få tilgang til dem i php

Hvis du er en php-utvikler, kan du få tilgang til forespørselshodene ved å bruke getallheaders () funksjonen. For å forstå arbeidet, la oss kjøre følgende kode:

Og vi får en utskrift av header-arrayet.

Men oftere får de tilgang via den globale variabelen $ _SERVER. Nesten hver http-header har et lignende elementnavn i denne variabelen, dannet i henhold til prinsippet HTTP_header_name. Så for den samme 'User_Agent' er det en variabel $ _SERVER ['HTTP_USER_AGENT'];

Funksjonen headers_list () brukes til å hente overskriftene som serveren skal sende til brukeren. Som regel oppretter serveren de manglende nødvendige overskriftene allerede på slutten av alle skript. Derfor vil denne matrisen inneholde overskriftene enten de som serveren opprettet før kjøringen av skriptet startet (og de vil ikke bli endret), eller de som vi angir manuelt. De kan stilles inn manuelt ved å bruke overskriftsfunksjonen;
La oss kjøre følgende kode:

Vi vil se en utskrift av overskrifter klare til å sendes på det tidspunktet funksjonen kalles:

Den første overskriften ble satt automatisk, og den bærer navnet på serveren som skriptet kjører på. Den andre installeres av oss manuelt. Hvis nettleseren trengte en Fruit-header, ville den hente den fra serverens http-svar og bruke den. Men siden nettleseren vår ikke trenger det, ignorerer den ganske enkelt linjen som den ikke forstår.

Strukturen til http-forespørselen

Vår forespørsel ser slik ut:

Den første linjen i den, som nevnt tidligere, er spørringsstrengen. Den består av tre deler:

  • metode(metode) - indikerer hva slags forespørsel. De vanligste metodene er GET, POST, HEAD. De vil bli skrevet om i neste avsnitt.
  • sti(bane) – Dette er vanligvis den delen av URL-en som kommer etter domenet. For eksempel hvis du skriver inn adressefeltet http://www.scriptsite.ru/about/, vil baneverdien være / om /.
  • protokoll(protokoll) - protokollen som brukes. Vanligvis sammensatt av "HTTP" og protokollversjonen. Vanligvis i moderne nettlesere versjon 1.1 brukes

Så er det overskrifter i form av strenger i formatet "Navn: verdi".
Forresten, data om informasjonskapsler overføres også i denne forespørselen som en av overskriftene. De fleste av disse linjene er valgfrie. Spørringen kan forkortes til to linjer totalt:

GET / artikkel / vis / 4 / HTTP / 1.1

Vert: scriptsite.ru

Forespørselsmetoder

get request brukes vanligvis til å be om et dokument som passerer noen parametere.
Dette er hovedmetoden som brukes for å få html-sider, bilder, CSS og JavaScript-filer, etc.
På grunn av det faktum at parametrene kan være hvilke som helst, og på serveren er det ingen begrensninger på metodene for deres behandling, brukes ofte metoden for å be om data til å overføre informasjon. For eksempel vil vi ha et skjema som dette

I dette tilfellet vil disse parameterne være synlige i adressefeltet til nettleseren.

POST

Post er metoden som brukes for å legge ut data til serveren. Selv om du kan sende data til serveren ved å bruke GET-metoden via adressefeltet til nettleseren, foretrekkes POST i de fleste tilfeller. Sende store volumer data via GET er upraktisk. I tillegg har GET noen begrensninger som ikke tillater for eksempel å publisere denne artikkelen på nettstedet mitt gjennom bare én linje i nettleseren. POST-forespørsler brukes oftest til innsending av nettskjemaer. La oss endre skjemaet fra forrige eksempel ved å gi det POST-metoden

Overskriftene Content-Type og Content-Length legges til automatisk. De inneholder informasjon om typen og størrelsen på dataene.
Alle data overføres etter sending av overskrifter i samme form som i GET-forespørselslinjen

POST-metoden brukes ofte i AJAX, cURL, etc.
Filopplastingsskjemaer fungerer bare gjennom POST-metoden

HODE

Mange av dere har kanskje ikke kjent til denne typen forespørsler.
Denne metoden fungerer på samme måte som post, bortsett fra at serveren ikke returnerer noe tilleggsinnhold annet enn overskriftene.
Bruken av denne overskriften er berettiget i mange tilfeller. For eksempel når nettleseren en gang bufret en fil og nå vil vite om den har endret seg på serveren. Nettleseren kan be om informasjon om det uten å laste ned hele filen selv.
I tillegg brukes denne metoden ofte i tjenester som tester koblinger for helse. Det lar deg finne ut av hva URL-adresser det er fortsatt filer, og som de ikke lenger er der, mens filene igjen ikke lastes ned.

HTTP-responsstruktur

Serveren svarer på hver forespørsel med følgende svar:

Den første linjen er protokollversjonen.
Neste er serverstatuskoden. V gitt verdi koden er 200. Statuskoden forteller nettleseren nøyaktig hva som skjedde på serveren under behandlingen av forespørselen. Status nummer 200 betyr at forespørselen vår har blitt behandlet, og serveren vil sende det forespurte dokumentet umiddelbart etter at overskriftene er overført.
Resten av linjene inneholder all slags informasjon om den overførte filen.

Du kan også legge til fakta om 404-feilen i statusinformasjonen. Navnet kom nettopp fra 404-koden som serveren sender når den ikke finner filen på diskene.
For mer informasjon om serverstatuser, se neste artikkel.

Vær også oppmerksom på