Wat zijn HTTP-headers. Algemene theorie. http-headers bekijken. Livehttp-headers voor Mozilla Firefox

Dus, na het materiaal dat op deze site wordt gepresenteerd onder de knie te hebben en onafhankelijke pogingen te hebben gedaan om HTML leren en CSS zou je webpagina's met initiële en bijna initiële complexiteit moeten kunnen maken. Maar ik denk dat het niet alleen belangrijk is om de toegewezen taken te kunnen uitvoeren, maar ook om te begrijpen hoe je oplossingen werken op alle niveaus van de organisatie. Een tool voor het bekijken van de HTTP-headers die door uw browser naar de webserver worden verzonden en vice versa, zal u helpen om hier dichter bij te komen.

In het bovenstaande artikel werden, naast theoretische informatie, ook lijsten gegeven van HTTP-headers die door de browser werden gebruikt bij het indienen van een verzoek. Startpagina site ya.ru en opgenomen in het antwoord van de webserver op het bijbehorende verzoek. Maar het is veel interessanter (en nuttiger) om te zien hoe uw server reageert op verzoeken van de browser van uw pagina's. Later, bij het maken van "slimme" HTML-pagina's, zal dit de sleutel worden tot het begrijpen van de principes van actieve interactie tussen de gebruiker en de site.

Als hulpmiddel om HTTP-headers te bekijken, raad ik aan om de plug-in te gebruiken om browser FireFox LiveHTTPHeaders... Je kunt het als volgt installeren: Tools - Add-ons - Zoek naar add-ons, zoek naar het woord "headers", installeer LiveHTTPHeaders. Na het herstarten van de browser, nieuwe functie: Tools - HTTP-headers bekijken.

Ik raad aan om de plug-in uit te proberen op de pagina die in de vorige les is gemaakt. Open het venster "HTTP-headers bekijken", klik op "wissen" om de headers te verwijderen die verschijnen (bij het opvragen van de startpagina van de browser, enz.). Vervolgens doen we een paginaverzoek, bijvoorbeeld http: // test-domain2 /. Headers van browserverzoeken en van webserverreacties verschenen in het headervenster:

Het record bestaat uit drie blokken: ten eerste gaat de URL van de opgevraagde pagina, vervolgens, via een lege regel, de HTTP-headers gevonden in het HTTP-verzoek van deze pagina en ten slotte de HTTP-headers gevonden in het HTTP-antwoord van het web server. De vermeldingen zijn gescheiden door lijnen.

Om een ​​webpagina te vormen, doet de browser verschillende verzoeken aan de webserver: rechtstreeks naar de paginacode, bestanden in CSS-stijl, afbeeldingen, enz. Al deze verzoeken worden weergegeven in het formulier. De eerste is de aanvraag voor de HTML-pagina:

GET / HTTP / 1.1 Host: test-domain2 User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 5.1; ru; rv: 1.9.2) Gecko / 20100115 Firefox / 3.6 Accepteren: tekst / html, applicatie / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8 Accept-Taal: 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 Verbinding: keep-alive Pragma: geen cache Cache-Control: geen cache

waarop de server antwoordde:

HTTP / 1.1 200 OK Datum: vr 04 jun 2010 08:52:09 GMT-server: Apache Laatst gewijzigd: wo 26 mei 2010 11:34:58 GMT Etag: "3000000002878-20ca-4877da9e71c80" Accepteerbereik: bytes Inhoudslengte: 8394 Keep-Alive: time-out = 5, max = 100 Verbinding: Keep-Alive Inhoudstype: tekst / html; tekenset = UTF-8

In de header van het HTTP-antwoord ziet u de naam van de webserver, de paginagrootte in bytes en de codering. Ter herinnering: de plug-in geeft HTTP-headers weer die deel uitmaken van het HTTP-pakket. Het tweede deel is de inhoud van het pakket, het wordt niet weergegeven. Maar hier is alles eenvoudig: regelmatige verzoeken pagina's / bestanden hebben geen hoofdtekst in het pakket (en we zullen later over ongebruikelijke leren), en de hoofdtekst in het antwoord vertegenwoordigt de inhoud van de gevraagde pagina / het gevraagde bestand, dat de browser ontvangt.

Of je nu een programmeur bent of niet, je hebt hem overal op internet gezien. Op de dit moment iets dat begint met "http: //" wordt weergegeven in de adresbalk van de browser. Zelfs je eerste Hello World-script stuurde een HTTP-header zonder je begrip. In dit artikel gaan we leren over de basisprincipes van HTTP-headers en hoe ze kunnen worden gebruikt in onze webapplicaties.

Wat zijn HTTP-headers?

HTTP staat voor Hypertext Transfer Protocol. Het wereldwijde web maakt gebruik van dit protocol. Het werd opgericht in de vroege jaren 1990. Bijna alles wat u in uw browser ziet, wordt via HTTP naar uw computer overgebracht. Toen u bijvoorbeeld de pagina voor dit artikel opende, heeft uw browser meer dan 40 HTTP-verzoeken gedaan en voor elk HTTP-antwoorden ontvangen.

HTTP-headers vormen het belangrijkste onderdeel van deze HTTP-verzoeken en -antwoorden en bevatten informatie over de browser van de client, de opgevraagde pagina, de server en meer.

Voorbeeld

Wanneer u een URL invoert in de adresbalk, doet uw browser een HTTP-verzoek en dit kan er als volgt uitzien:

GET / tutorials / overig / 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) Accepteren: tekst / html, applicatie / xhtml + xml, applicatie / xml; q = 0.9, * / *; q = 0.8 Accept-Taal: 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 Verbinding: keep-alive Cookie: PHPSESSID = r2t5uvjq435r4q7ib3vtdjq120 Pragma: geen cache Cache-Control: geen cache

De eerste regel is de "Request Line" die wat basisinformatie over de aanvraag bevat. De rest zijn HTTP-headers.

Na dit verzoek ontvangt uw browser een HTTP-antwoord dat er als volgt uit kan zien:

HTTP / 1.x 200 OK Transfer-Encoding: chunked Datum: Sat, 28 Nov 2009 04:36:25 GMT Server: LiteSpeed ​​​​Connection: close X-Powered-By: W3 Total Cache / 0.8 Pragma: public Verloopt: Sat , 28 Nov 2009 05:36:25 GMT Etag: "pub1259380237; gz" Cache-Control: max-age = 3600, public Content-Type: text / html; charset = UTF-8 Laatst gewijzigd: Sat, 28 Nov 2009 03:50:37 GMT X-Pingback: http://net.tutsplus.com/xmlrpc.php Content-codering: gzip Vary: Accept-Encoding, Cookie, User-agent Top 20+ MySQL-best practices - Nettuts +

De eerste regel is de "Statusbalk" gevolgd door de "HTTP-headers" tot een lege regel. Daarna begint de "inhoud" (in deze zaak- HTML-uitvoer).

Als je kijkt naar bron webpagina's in uw browser, ziet u alleen onderdeel van HTML in plaats van HTTP-headers, ook al zijn ze eigenlijk samen overgedragen.

Deze HTTP-verzoeken worden ook verzonden en geaccepteerd voor andere zaken zoals afbeeldingen, CSS-bestanden, JavaScript-bestanden, enz. Daarom zei ik eerder dat uw browser ten minste 40 of meer HTTP-verzoeken heeft verzonden sinds u alleen deze artikelpagina hebt gedownload.

Laten we nu de structuur in meer detail bekijken.

Hoe HTTP-headers te zien

Voor het ontleden van HTTP-headers gebruik ik het volgende: Firefox-extensies:

HTTP-headers in HTTP-verzoeken

We gaan nu kijken naar enkele van de meest voorkomende HTTP-headers die te vinden zijn in HTTP-verzoeken.

Bijna al deze headers zijn te vinden in de $ _SERVER array in PHP. U kunt ook de functie getallheaders () gebruiken om alle headers tegelijkertijd op te halen.

Gastheer

Een HTTP-verzoek wordt verzonden naar specifieke IP-adressen. Maar aangezien de meeste servers meerdere sites onder hetzelfde IP-adres kunnen hosten, moeten ze weten welke Domeinnaam op zoek naar een browser.

Host: net.tutsplus.com

Dit is in feite de hostnaam, inclusief het domein en subdomein.

In PHP kan het worden gevonden als $ _SERVER ["HTTP_HOST"] of $ _SERVER ["SERVER_NAME"].

User-agent

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)

Deze kop kan verschillende informatie bevatten, zoals:

Zo kunnen websites bepaalde algemene informatie over hun surferssystemen. Ze kunnen bijvoorbeeld bepalen of een surfer gebruikmaakt van mobiele browser en stuurt ze door naar mobiele versie hun website, die beter presteert bij een lage resolutie.

In PHP kan het als volgt worden uitgedrukt: $ _SERVER ["HTTP_USER_AGENT"].

If (strstr ($ _ SERVER ["HTTP_USER_AGENT"], "MSIE 6")) (echo "Stop het gebruik van IE6!";)

Accept-Taal

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

Deze kop geeft de standaard taalinstellingen weer. Als de site verschillende taalversies heeft, kan hij op basis van deze gegevens een nieuwe surfer omleiden.

In PHP kan het als volgt worden gevonden: $ _SERVER ["HTTP_ACCEPT_LANGUAGE"].

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

Accepteren-codering

Accepteren-codering: gzip, leeglopen

De meeste moderne browsers ondersteunen gzip en sturen dit mee in de header. De webserver kan de output-HTML vervolgens in een gecomprimeerd formaat verzenden. Dit kan de grootte tot 80% verkleinen om bandbreedte en tijd te besparen.

In PHP kan het als volgt worden gevonden: $ _SERVER ["HTTP_ACCEPT_ENCODING"]. Wanneer u echter de functie Bel terug ob_gzhandler (), het zal de waarde automatisch controleren, dus dat heb je niet nodig.

// schakelt uitvoerbuffering in // en alle uitvoer wordt gecomprimeerd als de browser dit ondersteunt ob_start ("ob_gzhandler");

Indien-Gewijzigd-Sinds

Als een webdocument al in uw browser is gecached en u het opnieuw bezoekt, kan uw browser controleren of het document is bijgewerkt door het volgende te verzenden:

Als het sinds die datum niet is gewijzigd, verzendt de server een 304 Not Modified-responscode, maar de inhoud niet, en de browser downloadt de inhoud uit de cache.

In PHP kan het als volgt worden gevonden: $ _SERVER ["HTTP_IF_MODIFIED_SINCE"].

// neem aan dat $ last_modify_time de laatste keer was dat de uitvoer werd bijgewerkt // heeft de browser de If-Modified-Since-header verzonden? if (isset ($ _ SERVER ["HTTP_IF_MODIFIED_SINCE"])) (// als de browsercache overeenkomt met de wijzigingstijd if ($ last_modify_time == strtotime ($ _ SERVER ["HTTP_IF_MODIFIED_SINCE"])) (// stuur een 304-header , en geen inhoudsheader ("HTTP / 1.1 304 Not Modified"); exit;))

Er is ook een Etag HTTP-header die kan worden gebruikt om te controleren huidige cache... We zullen hier binnenkort over praten.

Koekje

Zoals de naam al doet vermoeden, stuurt dit koekjes opgeslagen in uw browser voor dat domein.

Cookie: PHPSESSID = r2t5uvjq435r4q7ib3vtdjq120; foo = bar

Dit zijn naam = waardeparen, gescheiden door puntkomma's. Cookies kunnen ook een sessie-ID bevatten.

In PHP individuele cookies kan worden geopend met behulp van de $ _COOKIE-array. U hebt rechtstreeks toegang tot sessievariabelen met behulp van de $ _SESSION-array, en als u de sessie-ID nodig hebt, kunt u de functie session_id () gebruiken in plaats van een cookie.

Echo $ _COOKIE ["foo"]; // uitvoer: bar echo $ _COOKIE ["PHPSESSID"]; // uitvoer: r2t5uvjq435r4q7ib3vtdjq120 session_start (); echo session_id (); // uitvoer: r2t5uvjq435r4q7ib3vtdjq120

Verwijzer

Zoals de naam al doet vermoeden, bevat deze HTTP-header de link-url.

Als ik bijvoorbeeld naar Startpagina Nettuts + en op de artikellink hebt geklikt, wordt deze header naar mijn browser gestuurd:

Verwijzer: http://net.tutsplus.com/

In PHP kan het worden gevonden als $ _SERVER ["HTTP_REFERER"].

If (isset ($ _ SERVER ["HTTP_REFERER"])) ($ url_info = parse_url ($ _ SERVER ["HTTP_REFERER"]); // komt de surfer van Google? If ($ url_info ["host"] == "www .google.com ") (parse_str ($ url_info [" query "], $ vars); echo" U heeft op Google gezocht op dit trefwoord: ". $ vars [" q "];)) // als de verwijzende url was: // http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http+headers&aq=f&oq=&aqi=g-p1g9 // de output zal zijn: // U zocht op Google voor dit zoekwoord: http-headers

Het is je misschien opgevallen dat het woord "verwijzer" verkeerd gespeld is als "verwijzer". Helaas veranderde het op een vergelijkbare manier in de officiële HTTP-specificatie en liep het vast.

autorisatie

Autorisatie: Basis bXl1c2VyOm15cGFzcw ==

De gegevens in de header zijn gecodeerd met base64. Bijvoorbeeld, base64_decode ("bXl1c2VyOm15cGFzcw ==") retourneert "mijngebruiker: mijnpas"

In PHP zijn deze waarden te vinden als $ _SERVER ["PHP_AUTH_USER"] en $ _SERVER ["PHP_AUTH_PW"].

Hierover meer als we het hebben over de WWW-Authenticate header.

HTTP-headers in HTTP-antwoorden

We zullen nu enkele van de meest voorkomende HTTP-headers bekijken die worden gevonden in HTTP-reacties.

In PHP kun je antwoordheaders instellen met de functie header (). PHP verstuurt al automatisch bepaalde headers, voor het laden van content en het instellen van cookies enzo... Je kunt de headers zien die verstuurd worden of zullen worden verzonden met de headers_list () functie. U kunt controleren of de headers al zijn verzonden met behulp van de headers_sent () functie.

Cache-controle

Definitie van w3.org: "Het Cache-Control-headerveld wordt gebruikt om richtlijnen te specificeren die MOETEN worden uitgevoerd door alle caching-mechanismen langs de verzoek-/antwoordketen." Deze "caching-mechanismen" omvatten gateways en proxy's die uw ISP kan gebruiken.

Cache-Control: max-leeftijd = 3600, openbaar

"openbaar" betekent dat het antwoord door iedereen in de cache kan worden opgeslagen. "max-age" geeft aan hoeveel seconden de cache geldig is. Toestaan ​​dat uw site in de cache wordt opgeslagen, kan de serverbelasting verminderen en doorvoer en verhoog ook de laadtijd in de browser.

Caching kan ook worden voorkomen met de "no-cache"-richtlijn.

Cache-Control: geen cache

Inhoudstype

Deze kop geeft het "mime-type" van het document aan. Op basis hiervan bepaalt de browser hoe de content moet worden geïnterpreteerd. Bijvoorbeeld, html-pagina(of PHP-script met html-uitvoer) kan dit retourneren:

Inhoudstype: tekst / html; tekenset = UTF-8

"tekst" is het type en "html" is het subtype van het document. De koptekst kan ook meer informatie bevatten, zoals tekenset.

Voor een gif-afbeelding kan deze worden geplaatst.

Inhoudstype: afbeelding / gif

Browser kan gebruiken externe toepassing of een browserextensie op basis van het mime-type. Dit laadt bijvoorbeeld Adobe Reader:

Inhoudstype: applicatie / pdf

Bij het rechtstreeks laden kan Apache meestal het mime-type van het document detecteren en de juiste header verzenden. Bovendien hebben de meeste browsers een zekere mate van fouttolerantie en automatische detectie. mime-types als koppen onjuist zijn of ontbreken.

U vindt de lijst gewone types nabootsen.

In PHP kun je de functie finfo_file () gebruiken om het mime-type van een bestand te bepalen.

Inhoud-dispositie

Deze header vertelt de browser om een ​​downloadvenster voor bestanden te openen in plaats van te proberen de inhoud te ontleden. Voorbeeld:

Content-Disposition: bijlage; bestandsnaam = "download.zip"

Dit dwingt de browser om dit te doen:

Merk op dat de corresponderende Content-Type header ook meegestuurd moet worden:

Content-Type: applicatie / zip Content-Disposition: bijlage; bestandsnaam = "download.zip"

Inhoud lengte

Wanneer de inhoud aan de browser wordt aangeboden, kan de server de grootte (in bytes) aangeven met behulp van deze header.

Inhoudslengte: 89123

Dit is vooral handig bij het uploaden van bestanden. Zo kan de browser de voortgang van de download bepalen.

Hier is bijvoorbeeld een nepscript dat ik heb geschreven dat simuleert: langzaam laden.

// it "sa zip file header (" Content-Type: application / zip "); // 1 miljoen bytes (ongeveer 1 megabyte) header (" Content-Length: 1000000 "); // laad een downloaddialoog en sla deze op als download.zip-header ("Content-Disposition: bijlage; bestandsnaam =" download.zip ""); // 1000 keer 1000 bytes aan gegevens voor ($ i = 0; $ i< 1000; $i++) { echo str_repeat(".",1000); // sleep to slow down the download usleep(50000); }

Hier is het resultaat:

Nu ga ik commentaar geven op de Content-Length header

// het is een koptekst van een zipbestand ("Content-Type: applicatie / zip "); // de browser weet de grootte niet // header ("Content-Length: 1000000"); // laad een downloaddialoog en sla het op als download.zip-header ("Content-Disposition: bijlage; bestandsnaam =" download.zip ""); // 1000 keer 1000 bytes aan gegevens voor ($ i = 0; $ i< 1000; $i++) { echo str_repeat(".",1000); // sleep to slow down the download usleep(50000); }

Het resultaat is nu als volgt:

De browser kan alleen zien hoeveel bytes er zijn gedownload, maar hij weet het niet totale hoeveelheid... En de voortgangsbalk laat geen voortgang zien.

Etag

Dit is een andere header die wordt gebruikt voor caching. Het ziet er zo uit:

Etag: "pub1259380237; gz"

De webserver kan deze header meezenden met elk document dat hij serveert. De waarde kan gebaseerd zijn op de laatste wijzigingsdatum, bestandsgrootte of zelfs controlesom het dossier. De browser slaat deze waarde vervolgens op terwijl het document in de cache wordt opgeslagen. De volgende keer dat de browser hetzelfde bestand opvraagt, stuurt het dit in een HTTP-verzoek:

Indien-Geen-Overeenkomst: "pub1259380237; gz"

Als de Etag van het document hiermee overeenkomt, stuurt de server 304 in plaats van 200 en geen inhoud. De browser laadt inhoud uit de cache.

Laatst gewijzigd

Zoals de naam al doet vermoeden, geeft deze kop de datum aan laatste wijziging document in GMT-formaat:

Laatst gewijzigd: za 28 nov 2009 03:50:37 GMT $ modified_time = filemtime ($ bestand); header ("Laatst Gewijzigd:". gmdate ("D, d M Y H: i: s", $ Modify_time). "GMT");

Dit biedt de browser een andere manier om het document in de cache op te slaan. De browser kan dit in een HTTP-verzoek verzenden:

We hebben hier eerder over gesproken in de sectie "Als-aangepast-sinds".

Plaats

Deze header wordt gebruikt voor omleiding. Als de responscode 301 of 302 is, moet de server deze header ook verzenden. Als u bijvoorbeeld naar http://www.nettuts.com gaat, ontvangt uw browser het volgende:

HTTP / 1.x 301 Permanent verplaatst ... Locatie: http://net.tutsplus.com/ ...

In PHP kun je de surfer als volgt omleiden:

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

Standaard wordt hiermee een 302-antwoordcode verzonden. Als u wilt verzenden in plaats van 301:

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

Set-Cookie

Wanneer een website een cookie in uw browser wil plaatsen of bijwerken, zal deze deze header gebruiken.

Set-Cookie: huid = neushuid; pad = /; domein = .amazon.com; verloopt = zo, 29-nov-2009 21:42:28 GMT Set-Cookie: sessie-id = 120-7333518-8165026; pad = /; domein = .amazon.com; verloopt = za 27 feb 08:00:00 2010 GMT

Elke cookie wordt als een aparte header verzonden. Houd er rekening mee dat cookies geïnstalleerd met JavaScript gebruiken ga niet door HTTP-headers.

In PHP kun je cookies instellen met de functie setcookie () en PHP stuurt de juiste HTTP-headers.

Setcookie ("TestCookie", "foobar");

Wat resulteert in het verzenden van deze header:

Set-Cookie: TestCookie = foobar

Als er geen vervaldatum is opgegeven, wordt de cookie verwijderd wanneer het browservenster wordt gesloten.

WWW-Authenticeren

De site kan deze header verzenden om de gebruiker via HTTP te verifiëren. Wanneer de browser deze header ziet, wordt een login-dialoogvenster geopend.

WWW-Authenticeren: Basisrijk = "Beperkt gebied"

Die er als volgt uit zal zien:

  • Vertaling

Historisch gezien heeft Firefox een grote populariteit genoten onder webontwikkelaars vanwege de uitbreidbaarheid door allerlei soorten plug-ins en add-ons te verbinden externe ontwikkelaars... Het idee om functionaliteit in extensies te scheiden, maakte het mogelijk om veel verschillende taken rechtstreeks in de browser op te lossen, zonder toevlucht te nemen tot externe tools.

Natuurlijk vind je in deze lijst zeker al bekende extensies, maar een enorme laag handige extensies blijft altijd aan de zijlijn. Dus maak je klaar om nog een paar extensies te installeren! :)

Ingebouwde ontwikkeltools in Firefox

Voordat we aan de lijst beginnen, zou het verkeerd zijn om de tools die al in Firefox zijn ingebouwd niet te noemen. Hier hebben we het over de ontwikkelingstools in Firefox Aurora 10 en de functionaliteit die tegenwoordig in elke moderne browser te vinden is.

Bij het ontwikkelen van de interface van deze tools zijn veel benaderingen en oplossingen geprobeerd. Het resultaat is een behoorlijk mooie interface die iedereen kan proberen door Firefox Aurora te installeren (hmm, heb je het nog niet geïnstalleerd?)

Welnu, onder de snit vindt u een enorme lijst met extensies, die zeker nuttig zal zijn voor elke webontwikkelaar.

Vuurwants

Deze extensie is nul in de lijst met extensies. Firebug heeft de standaard gezet in ontwikkeltools voor alle browsers. Vaak gebruikt voor live CSS- en HTML-bewerking, JavaScript-foutopsporing en het optimaliseren van het laden van pagina's. Sommige van de onderstaande extensies zijn gebaseerd op Firebug, dus we komen op deze extensie terug.

Voor het geval dat, laat me je eraan herinneren dat Firebug behoorlijk geheugenintensief is, dus vergeet niet om het uit te schakelen (of gewoon niet in te schakelen) op die sites waarmee je niet werkt.

Standaard Firefox-extensies voor webontwikkelaars

Er zijn in de loop der jaren veel extensies ontwikkeld om het maximale uit Firefox te halen. Sommige zijn populair, andere zie je waarschijnlijk voor het eerst. Als u een extensie gebruikt die hier niet wordt genoemd, schrijf dan in de opmerkingen!

SeoQuake SEO

De Seoquake-extensie helpt u uw site te optimaliseren voor: zoekmachines en sociale netwerken.

ToonIP

Toont IP-adres(sen) huidige pagina op de statusbalk. Als u met de rechtermuisknop klikt, worden ook de hostnaam, informatie van hois, netcraft, enz. weergegeven. U kunt ook het IP-adres daar kopiëren.

Stijlvol

Wijziging van stylesheets voor sites. Stijlvol heeft, net als GreaseMonkey, een grote repository met thema's voor sites zoals Google, YouTube, Tumblr en anderen.

Sabotagegegevens

Extensie voor het bekijken en wijzigen van HTTP / HTTPS-headers en POST-parameters.

Totale validator

Gelijktijdige paginavalidatie door meerdere validators. Werkt met externe en interne sites, maar ook gewoon met lokale pagina's.

In dit artikel zullen we kijken waar headers voor zijn, zonder in details te treden, welke verantwoordelijk is voor wat. Een beschrijving van de rollen van de meest voorkomende rubrieken zal in de volgende artikelen worden gegeven.

Alle artikelen uit de cyclus:

  • Wat zijn HTTP-headers. Algemene theorie.

HTTP betekent HyperText-overdracht Protocol (Hypertext Transfer Protocol). Een protocol is een set regels waarmee: verschillende apparaten gegevens uitwisselen. Het is gemaakt in de jaren negentig. Nu wordt het bijna overal op internet gebruikt. Alles wat u in het browservenster ziet, is via dit protocol ontvangen. http-headers zijn misschien wel het belangrijkste in de communicatie tussen apparaten. Ze geven basisinformatie over de tot stand gebrachte verbinding en over: verzonden informatie via deze verbinding.
Laten we eens kijken naar het communicatieschema van de twee apparaten. Laat deze apparaten uw computer en een server op internet zijn:

Zoals u kunt zien, heeft de browser een http-verzoek verzonden. Het kan er ongeveer zo uitzien:

GET / overig-19 HTTP / 1.1 Host: www.scriptsite.ru User-Agent: 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) Accepteren: tekst / html, applicatie / xhtml + xml, applicatie / xml; q = 0,9, * / *; q = 0,8 Accepteer-taal: 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 Verbinding: keep-alive

In dit geval is de eerste regel de verzoekregel, alle andere regels zijn de http-headers die dragen Extra informatie over het verzoek, over de klant die deze informatie opvraagt, over vele andere dingen.
In antwoord op ons verzoek kan de server de volgende headers verzenden:

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 / 1.8.6 (2007-09-24)

X-aangedreven door: PHP / 5.2.5

Set-Cookie: PHPSESSID = ft47gokfee6amv3eda3k1p93s3; pad = /

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

Pragma: geen cache

Keep-Alive: time-out = 10, max = 1024

Verbinding: Keep-Alive

Transfer-codering: chunked

Inhoudstype: tekst / html

De eerste regel is de statusregel. De rest van de regels zijn headers. In het diagram was te zien dat de inhoud van de pagina ook wordt geladen. Maar deze inhoud wordt meestal niet weergegeven in plug-ins die headers bekijken. En de inhoud van de pagina is slechts een speciaal geval. Volgens het protocol hoeft de pagina niet te worden verzonden. In plaats daarvan, zowel een foto als een geluidsbestand, en filmpje. En ze zullen allemaal heel verschillende titels hebben.

Hoe kan ik de http-headers zien?

Om de http-headers te zien, raad ik de volgende Firefox-browserplug-ins aan:

Als u gebruik maakt van Chrome-browser, kunt u alle informatie bekijken door op de instellingenknop - tools - developer tools te klikken. Netwerken tabblad.
Ik kan gebruikers van de opera-browser niet adviseren, omdat ik geen vrienden ben met deze browser. Probeer de pagina te vernieuwen terwijl de plug-ins zijn geïnstalleerd en actief zijn. U ziet meteen enorme lijsten met verzoeken en reacties waarmee uw browser met de server heeft gecommuniceerd.

Http-headers en toegang tot deze in php

Als u een php-ontwikkelaar bent, kunt u de aanvraagheaders openen met de functie getallheaders (). Laten we de volgende code uitvoeren om zijn werk te begrijpen:

En we krijgen een afdruk van de header-array.

Maar vaker zijn ze toegankelijk via de globale variabele $ _SERVER. Bijna elke http-header heeft een vergelijkbare elementnaam in deze variabele, gevormd op basis van HTTP_header_name. Dus voor dezelfde 'User_Agent' is er een variabele $ _SERVER ['HTTP_USER_AGENT'];

De functie headers_list () wordt gebruikt om de headers op te halen die de server naar de gebruiker gaat sturen. In de regel stelt de server de ontbrekende verplichte headers al aan het einde van alle scripts samen. Daarom bevat deze array de headers die de server heeft gemaakt voordat de uitvoering van het script werd gestart (en ze zullen niet worden gewijzigd), of de headers die we handmatig hebben ingesteld. Ze kunnen handmatig worden ingesteld met behulp van de kopfunctie;
Laten we de volgende code uitvoeren:

We zullen een afdruk zien van headers die klaar zijn om te worden verzonden op het moment dat de functie wordt aangeroepen:

De eerste header is automatisch ingesteld en draagt ​​de naam van de server waarop het script draait. De tweede wordt handmatig door ons geïnstalleerd. Als de browser een Fruit-header nodig had, zou hij deze uit het http-antwoord van de server halen en gebruiken. Maar omdat onze browser het niet nodig heeft, negeert het gewoon de regel die het niet begrijpt.

De structuur van het http-verzoek

Ons verzoek ziet er als volgt uit:

De eerste regel daarin, zoals eerder vermeld, is de queryreeks. Het bestaat uit drie delen:

  • methode(methode) - geeft aan wat voor soort verzoek. De meest voorkomende methoden zijn GET, POST, HEAD. Ze zullen in de volgende sectie worden besproken.
  • pad(pad) - Dit is meestal het deel van de URL dat na het domein komt. Als u bijvoorbeeld intypt adresbalk http://www.scriptsite.ru/about/, de padwaarde is / about /.
  • protocol(protocol) - het gebruikte protocol. Meestal samengesteld uit "HTTP" en de protocolversie. Meestal, in moderne browsers versie 1.1 wordt gebruikt

Dan zijn er headers in de vorm van strings van het formaat "Naam: waarde".
Overigens worden in dit verzoek ook gegevens over cookies verzonden als een van de headers. De meeste van deze regels zijn optioneel. De query kan in totaal worden ingekort tot twee regels:

GET / artikel / show / 4 / HTTP / 1.1

Host: scriptsite.ru

Verzoekmethoden

KRIJGEN

get request wordt meestal gebruikt om een ​​document aan te vragen dat een aantal parameters doorgeeft.
Dit is de belangrijkste methode die wordt gebruikt om html-pagina's, afbeeldingen, CSS en JavaScript-bestanden, enz.
Omdat de parameters willekeurig kunnen zijn en er op de server geen beperkingen zijn voor het verwerken ervan, wordt vaak de methode voor het opvragen van gegevens gebruikt om informatie over te dragen. We hebben bijvoorbeeld zo'n formulier

In dit geval zijn deze parameters zichtbaar in de adresbalk van de browser.

NA

Post is de methode die wordt gebruikt om gegevens naar de server te verzenden. Hoewel u gegevens naar de server kunt verzenden met behulp van de GET-methode via de adresbalk van de browser, in de meeste gevallen heeft POST de voorkeur. Versturen grote volumes gegevens via GET is onpraktisch. Bovendien heeft GET enkele beperkingen die het bijvoorbeeld niet toestaan ​​om dit artikel op mijn site te publiceren via slechts één browserregel. POST-verzoeken worden meestal gebruikt voor het indienen van webformulieren. Laten we het formulier van het vorige voorbeeld wijzigen door het de POST-methode te geven

De headers Content-Type en Content-Length worden automatisch toegevoegd. Ze bevatten informatie over het type en de grootte van de gegevens.
Alle gegevens worden overgedragen na het verzenden van headers in dezelfde vorm als in de GET-verzoekregel

De POST-methode wordt vaak gebruikt in AJAX, cURL, enz.
Formulieren voor het uploaden van bestanden werken alleen via de POST-methode

HOOFD

Velen van jullie wisten misschien niet van dit soort verzoeken.
Deze methode werkt op dezelfde manier als posten, behalve dat de server geen extra inhoud retourneert, behalve de headers.
Het gebruik van deze header is in veel gevallen gerechtvaardigd. Bijvoorbeeld wanneer de browser ooit een bestand in de cache heeft opgeslagen en nu wil weten of het op de server is gewijzigd. De browser kan er informatie over opvragen zonder het hele bestand zelf te downloaden.
Daarnaast wordt deze methode vaak gebruikt bij diensten die verbindingen op gezondheid testen. Het stelt u in staat om erachter te komen door wat URL-adressen er zijn nog steeds bestanden en waarvoor ze er niet meer zijn, terwijl de bestanden opnieuw niet worden gedownload.

HTTP-antwoordstructuur

De server reageert op elk verzoek met de volgende antwoorden:

De eerste regel is de protocolversie.
De volgende is de serverstatuscode. IN gegeven waarde de code is 200. De statuscode vertelt de browser precies wat er op de server is gebeurd tijdens de verwerking van het verzoek. De 200e status betekent dat ons verzoek met succes is verwerkt en dat de server het gevraagde document onmiddellijk nadat de headers zijn verzonden, zal verzenden.
De rest van de regels bevatten allerlei informatie over het overgedragen bestand.

Je kunt ook het feit over de 404-fout toevoegen aan de statusinformatie. De naam komt precies van de 404-code die de server verzendt wanneer hij het bestand niet op zijn schijven kan vinden.
Zie het volgende artikel voor meer informatie over serverstatussen.

Let ook op