Time to Read-virus: hoe u het van de startpagina van de browser kunt verwijderen. Algemene structuur van berichten. Hervatten en fragmentarisch downloaden

Standaardprotocol voor het verzenden van gegevens via het World Wide Web is HTTP (HyperText Overdrachtsprotocol-- hypertext-overdrachtsprotocol). Het beschrijft berichten die kunnen worden uitgewisseld tussen clients en servers. Elke interactie bestaat uit een enkel ASCII-verzoek gevolgd door een enkel antwoord, vergelijkbaar met het RFC 822 MIME-standaardantwoord. Alle clients en alle servers moeten dit protocol volgen. Het wordt gedefinieerd in RFC 2616.

Verbindingen

De gebruikelijke manier waarop een browser met een server communiceert, is door een TCP-verbinding tot stand te brengen met poort 80 van de server, hoewel deze procedure formeel niet vereist is. De waarde van het gebruik van TCP is dat noch browsers, noch servers zich zorgen hoeven te maken over verloren, dubbele of te lange berichten en bevestigingen. Dit alles is voorzien TCP-protocol.

In HTTP 1.0 werd nadat een verbinding tot stand was gebracht één verzoek verzonden, waarop één antwoord werd ontvangen. Hierna werd de TCP-verbinding verbroken. Destijds bestond een typische webpagina volledig uit HTML-tekst en deze manier van interactie voldeed. Er gingen echter enkele jaren voorbij en de pagina bevatte veel pictogrammen, afbeeldingen en andere versieringen. Het is duidelijk dat het opzetten van een TCP-verbinding om een ​​enkel pictogram te verzenden verspillend en te duur is.

Deze overweging leidde tot de creatie van het HTTP 1.1-protocol, dat stabiele verbindingen ondersteunde. Dit betekende dat het mogelijk was om een ​​TCP-verbinding tot stand te brengen, een verzoek te verzenden, een antwoord te ontvangen en vervolgens aanvullende verzoeken en antwoorden te verzenden en ontvangen. Zo werden de overheadkosten die tijdens permanente verbindingsinstallaties en ontkoppelingen werden gemaakt, verlaagd. Het is ook mogelijk geworden om verzoeken te pijplijnen, dat wil zeggen verzoek 2 te verzenden nog voordat het antwoord op verzoek 1 arriveert.

Hoewel HTTP specifiek is ontworpen voor gebruik in webtechnologieën, is het met opzet algemener gemaakt dan noodzakelijk, omdat het bedoeld was voor toekomstig gebruik in objectgeoriënteerde toepassingen. Om deze reden zijn er, naast de reguliere zoekopdrachten op webpagina's, speciale bewerkingen ontwikkeld die methoden worden genoemd. Ze danken hun bestaan ​​aan de SOAP-technologie. Elk verzoek bestaat uit een of meer ASCII-strings, waarbij het eerste woord de naam is van de aan te roepen methode. De ingebouwde methoden staan ​​vermeld in de tabel in figuur 6. Naast deze algemene methoden kunnen verschillende objecten ook hun eigen specifieke methoden hebben. Methodenamen zijn hoofdlettergevoelig, wat betekent dat de GET-methode bestaat, maar de get-methode niet.

Figuur 6 - Ingebouwde HTTP-verzoekmethoden

De GET-methode vraagt ​​van de server een pagina op (die over het algemeen een object is, maar in de praktijk meestal slechts een bestand is) gecodeerd volgens de MIME-standaard. Het merendeel van de verzoeken aan de server zijn GET-verzoeken.

De HEAD-methode vraagt ​​eenvoudigweg om de header van het bericht, zonder de pagina zelf. Met deze methode kunt u achterhalen wanneer een pagina voor het laatst is gewijzigd om indexinformatie te verzamelen of eenvoudigweg de functionaliteit van een bepaalde URL te controleren.

De PUT-methode is het tegenovergestelde GET-methode: Het leest niet, maar schrijft de pagina. Met deze methode kunt u een reeks webpagina's maken op een externe server. De hoofdtekst van het verzoek bevat de pagina. Het kan MIME-gecodeerd zijn. In dit geval kunnen de regels die volgen op de PUT-opdracht verschillende headers bevatten, zoals Content-Type of authenticatieheaders, die de rechten van de abonnee op de gevraagde bewerking bevestigen.

De POST-methode lijkt enigszins op de PUT-methode. Het bevat ook een URL, maar in plaats van bestaande gegevens te vervangen, worden de nieuwe gegevens (in zekere zin) aan de bestaande gegevens "toegevoegd". Dit kan het posten van een bericht op een conferentie zijn of het toevoegen van een bestand aan een BBS-prikbord. In de praktijk wordt noch PUT, noch POST veel gebruikt.

Het is niet verwonderlijk dat de DELETE-methode de pagina verwijdert. Zoals in de PUT-methode, hier bijzondere rol authenticatie en toestemming om deze bewerking uit te voeren kunnen een rol spelen. Zelfs als de gebruiker toestemming heeft om de pagina te verwijderen, is er geen garantie dat de DELETE-methode de pagina zal verwijderen, want zelfs als de gebruiker ermee instemt externe HTTP-server het bestand zelf kan worden beschermd tegen wijziging of verplaatsing.

De TRACE-methode is bedoeld voor foutopsporing. Het vertelt de server om het verzoek terug te sturen. Deze methode is vooral handig wanneer verzoeken niet correct worden verwerkt en de client wil weten wat voor soort verzoek de server daadwerkelijk ontvangt.

De CONNECT-methode wordt momenteel niet gebruikt. Het is gereserveerd voor toekomstig gebruik.

Met de OPTIONS-methode kan de client de server vragen naar zijn eigenschappen of de eigenschappen van een specifiek bestand.

Als antwoord op elk verzoek van de server wordt een antwoord ontvangen met daarin een statusregel en eventueel ook Extra informatie(bijvoorbeeld een webpagina of een deel daarvan). De statusregel kan een driecijferige statuscode bevatten die aangeeft of het verzoek succesvol was of waarom het mislukte. De eerste categorie is bedoeld om alle antwoorden in vijf hoofdgroepen te verdelen, zoals weergegeven in de tabel in figuur 7. Codes die beginnen met 1 Aхх) worden in de praktijk zelden gebruikt. Codes die beginnen met 2 betekenen dat het verzoek succesvol is verwerkt en dat de gegevens (indien gevraagd) zijn verzonden. De 3xx-codes vertellen de client dat hij zijn geluk ergens anders moet beproeven - met behulp van een andere URL of zijn eigen cache.

Figuur 7 - Groepen statuscodes in serverreacties

Codes die beginnen met 4 betekenen dat het verzoek is mislukt om een ​​of andere reden die verband houdt met de klant: bijvoorbeeld niet-bestaande pagina of het verzoek zelf was onjuist. Ten slotte duiden 5xx-codes op serverfouten, hetzij als gevolg van een programmafout of tijdelijke overbelasting.

Voorbeeld van HTTP-gebruik

Omdat HTTP een tekstprotocol is, kan de interactie met de server via een terminal (die in dit geval als het tegenovergestelde van een browser fungeert) heel eenvoudig worden georganiseerd. U hoeft alleen maar een TCP-verbinding tot stand te brengen met poort 80 van de server. De lezer mag zelf zien hoe dit script werkt (het verdient de voorkeur om het in te voeren). UNIX-systeem, aangezien sommige andere systemen de verbindingsstatus mogelijk niet weergeven). De volgorde van de opdrachten is dus:

Figuur 8 - reeks HTTP-protocolopdrachten

Deze reeks opdrachten brengt een telnet-verbinding tot stand (dat wil zeggen een TCP-verbinding) met poort 80 van de IETF-webserver op www.ietf.org.

Het resultaat van de communicatiesessie wordt vastgelegd in een logbestand, dat vervolgens kan worden bekeken. Vervolgens komt het GET-commando. De naam van het opgevraagde bestand en het overdrachtsprotocol worden aangegeven. Vervolgens komt de vereiste regel met de Host-header. De lege regel die erop volgt, is ook vereist. Het signaleert aan de server dat de verzoekheaders op zijn. Het close-commando (dit is een Telnet-programmacommando) sluit de verbinding.

Het verbindingslogbestand, log, kan worden bekeken met behulp van elk teksteditor. Het zou ongeveer moeten beginnen zoals weergegeven in de lijst in Figuur 8, tenzij er in deze periode enkele wijzigingen zijn aangebracht op de IETF-website.

Figuur 9 - Start van de uitvoer van het bestand “www.ietf.org/rfc.html”

De eerste drie regels in deze aanbieding zijn gemaakt Telenet programma, niet de afgelegen locatie. Maar de regel die begint met HTTP/1.1 is al een IETF-antwoord, wat aangeeft dat de server met u wil communiceren via het HTTP/1.1-protocol. Dit wordt gevolgd door een reeks headers en ten slotte de inhoud van het opgevraagde bestand zelf. De ETag-header, een unieke pagina-ID die is gekoppeld aan caching, en de X-Pad, een niet-standaard header die browserfouten helpt bestrijden.

We presenteren u een beschrijving van de belangrijkste aspecten van het HTTP-protocol - een netwerkprotocol waarmee uw browser vanaf het begin van de jaren 90 tot op de dag van vandaag webpagina's kan laden. Dit artikel is geschreven voor degenen die net beginnen te werken met computernetwerken en zich ontwikkelen netwerktoepassingen, en die het nog steeds lastig vinden om zelf de officiële specificaties te lezen.

HTTP- een veelgebruikt protocol voor gegevensoverdracht, oorspronkelijk bedoeld voor de overdracht van hypertekstdocumenten (dat wil zeggen documenten die koppelingen kunnen bevatten die navigatie naar andere documenten mogelijk maken).

De afkorting HTTP staat voor HyperText-overdrachtsprotocol, "hypertekstoverdrachtsprotocol". Volgens de OSI-specificatie is HTTP een applicatielaagprotocol (bovenste, 7e laag). De huidige versie van het protocol, HTTP 1.1, wordt beschreven in de RFC 2616-specificatie.

Het HTTP-protocol omvat het gebruik van een client-server gegevensoverdrachtstructuur. De clientapplicatie genereert een verzoek en stuurt dit naar de server, waarna de serversoftware het verzoek verwerkt, een reactie genereert en terugstuurt naar de client. De clientapplicatie kan dan andere verzoeken blijven verzenden, die op dezelfde manier worden verwerkt.

Een taak die traditioneel wordt opgelost met behulp van het HTTP-protocol is de gegevensuitwisseling tussen gebruikerstoepassing die toegang heeft tot webbronnen (meestal een webbrowser) en een webserver. Op dit moment dankzij HTTP-protocol zorgt voor de werking van het World Wide Web.

HTTP wordt ook vaak gebruikt als transportprotocol voor andere applicatielaagprotocollen zoals SOAP, XML-RPC en WebDAV. In dit geval wordt het HTTP-protocol gebruikt als “transport”.

De API van veel softwareproducten impliceert ook het gebruik van HTTP voor gegevensoverdracht - de gegevens zelf kunnen elk formaat hebben, bijvoorbeeld XML of JSON.

Normaal gesproken wordt HTTP-gegevensoverdracht uitgevoerd via TCP/IP-verbindingen. In dit geval gebruikt serversoftware meestal TCP-poort 80 (en als de poort niet expliciet wordt gespecificeerd, gebruikt clientsoftware meestal standaard poort 80 voor het openen van HTTP-verbindingen), hoewel het elke andere poort kan gebruiken.

Hoe verzend ik een HTTP-verzoek?

De eenvoudigste manier om het HTTP-protocol te begrijpen, is door handmatig toegang te krijgen tot bepaalde webbronnen. Stel je voor dat je een browser bent en dat je een gebruiker hebt die heel graag artikelen van Anatoly Alizar wil lezen.

Laten we aannemen dat hij binnenkwam adresbalk als vervolg op:

Http://alizar.site/

Dienovereenkomstig moet u nu als webbrowser verbinding maken met de webserver op alizar.site.

Hiervoor kunt u elke gebruiken geschikt nut opdrachtregel. Telenet bijvoorbeeld:

Telnet alizar.site 80

Laat me meteen verduidelijken dat als je plotseling van gedachten verandert, je op Ctrl + “]” drukt en vervolgens op Enter drukt. Hiermee kun je de HTTP-verbinding verbreken. Naast telnet kun je nc (of ncat) proberen - afhankelijk van je smaak.

Nadat u verbinding heeft gemaakt met de server, moet u een HTTP-verzoek verzenden. Dit is trouwens heel eenvoudig: HTTP-verzoeken kunnen uit slechts twee regels bestaan.

Om een ​​HTTP-verzoek te genereren, moet u een startregel opstellen en ook de ten minsteéén header is de Host-header, die verplicht is en aanwezig moet zijn in elk verzoek. Feit is dat de conversie van een domeinnaam naar een IP-adres aan de clientzijde wordt uitgevoerd en dat de externe server dus, wanneer u een TCP-verbinding opent, geen informatie heeft over welk adres voor de verbinding is gebruikt: het zou bijvoorbeeld het adres alizar..ru of m. kunnen zijn. Maar in feite netwerkverbinding in alle gevallen wordt het geopend met knooppunt 212.24.43.44, en zelfs als aanvankelijk bij het openen van de verbinding niet dit IP-adres was opgegeven, maar een aantal Domeinnaam, dan wordt de server hier op geen enkele manier over geïnformeerd - en daarom moet dit adres in de Host-header worden doorgegeven.

De start (initiële) verzoekregel voor HTTP 1.1 is samengesteld volgens het volgende schema:

Bijvoorbeeld (een dergelijke startregel kan aangeven dat de hoofdpagina van de site wordt opgevraagd):

En vergeet natuurlijk niet dat elke technologie veel eenvoudiger en duidelijker wordt als je deze daadwerkelijk gaat gebruiken.

Veel succes en vruchtbaar leren!

Tags:

  • http
  • Alizar
  • spy
Tags toevoegen

De kern van het web wordt gevormd door het Hypertext Transfer Protocol (HTTP), een applicatielaagprotocol. HTTP-beschrijving is te vinden in RFC 1945 en RFC 2616. Het HTTP-protocol wordt geïmplementeerd met behulp van twee programma's: een client en een server, die, gelegen op verschillende eindsystemen, HTTP-berichten uitwisselen. De volgorde van uitwisseling en de inhoud van berichten worden beschreven in het protocol. Voordat we in HTTP duiken, moeten we eerst de terminologie begrijpen die in de webcontext wordt gebruikt.

Elke webpagina of document bestaat uit objecten. Het voorwerp vertegenwoordigt regulier bestand in HTML-formaat, afbeelding in JPEG-formaat of GIF, Java-applet, audioclip, enz., dat wil zeggen een eenheid die zijn eigen Uniform Resource Locator (URL) heeft. Normaal gesproken bestaan ​​webpagina's uit een basis-HTML-bestand en de objecten waarnaar het linkt. Dus als een webpagina een eenvoudig HTML-bestand en vijf afbeeldingen bevat, bestaat deze uit zes objecten. Objectkoppelingen die verband houden met een webpagina zijn URL's die zijn opgenomen in het onderliggende HTML-bestand. Een URL bestaat uit twee delen: de hostnaam van de server waarop het object zich bevindt, en het pad naar het object. Voor de URL _www.someSchool.edu/someDepartment/picture.gif is de hostnaam bijvoorbeeld het fragment _www.someSchool.edu en is het pad naar het object het fragment someDepartment/picture.gif.

De webuser-agent wordt de browser genoemd; het geeft webpagina's weer en voert ook veel extra hulpprogramma's uit. Bovendien vertegenwoordigen browsers de clientzijde van het HTTP-protocol. De termen “browser” en “client” zullen in de webcontext dus als gelijkwaardig worden gebruikt. Enkele van de meest populaire browsers zijn Netscape Navigator en Microsoft Internet Explorer.

De webserver bevat objecten, die elk worden geïdentificeerd door hun URL. Bovendien vertegenwoordigen webservers de serverkant van het HTTP-protocol. De meest populaire webservers zijn Apache en Microsoft Internet Information Server.

Het HTTP-protocol definieert hoe clients (zoals browsers) webpagina's opvragen en hoe servers die pagina's afleveren. We zullen later meer in detail praten over de interactie tussen client en server, maar het basisidee kan worden begrepen uit Fig. 2.4. Wanneer een gebruiker een webpagina opvraagt ​​(bijvoorbeeld op een hyperlink klikt), stuurt de browser een HTTP-verzoek naar de server voor de objecten waaruit de webpagina bestaat. De server ontvangt het verzoek en verzendt antwoordberichten met de vereiste objecten. In 1997 begonnen bijna alle webbrowsers en webservers HTTP-versie 1.0 te ondersteunen, beschreven in RFC-document 1945. In 1998 begon de overgang naar versie 1.1, die werd beschreven in RFC 2616. Versie 1.1 heeft terugwaartse compatibiliteit met versie 1.0, dat wil zeggen dat elke server of browser die versie 1.1 gebruikt, volledig kan communiceren met een browser of server die versie 1.0 ondersteunt.

Zowel HTTP 1.0 als HTTP 1.1 gebruiken TCP als transportlaagprotocol. Een HTTP-client brengt eerst een TCP-verbinding met de server tot stand, en nadat de verbinding tot stand is gebracht, beginnen de client en de server te communiceren met het TCP-protocol via een socketinterface. Zoals eerder vermeld zijn sockets "deuren" tussen processen en het transportlaagprotocol.

De client verzendt verzoeken en ontvangt antwoorden via de socketinterface, en de server gebruikt de socketinterface om verzoeken te ontvangen en uit te voeren. Nadat het webverzoek de client-socket passeert, is het in handen van het TCP-protocol. Bedenk dat een van de functies van het TCP-protocol het garanderen van betrouwbare gegevensoverdracht is; dit betekent dat elk verzoek dat door de client wordt verzonden en elk antwoord van de server precies wordt afgeleverd zoals het is verzonden. Dit is waar een van de voordelen van het meerlaagscommunicatiemodel zich manifesteert: het HTTP-protocol hoeft de betrouwbaarheid van de transmissie niet te controleren en de hertransmissie van pakketten te garanderen in geval van corruptie. Al het ‘vuile’ werk zal worden gedaan door het TCP-protocol en protocollen op een lager niveau.

Opgemerkt moet worden dat nadat het onderhoud aan clients is voltooid, de server geen informatie over hen opslaat. Als een client bijvoorbeeld twee verzoeken achter elkaar voor dezelfde bron indient, zal de server deze vervullen zonder de cliënt enige kennisgeving te geven over het dubbele verzoek. Er wordt gezegd dat het HTTP-protocol een staatloos protocol voor verbindingen is.

HTTP is een protocol voor het overbrengen van hypertekst tussen gedistribueerde systemen. In wezen is http het fundamentele element moderne internet. Als zichzelf respecterende webontwikkelaars moeten we er zoveel mogelijk van weten.

Laten we dit protocol bekijken door de lens van ons beroep. In het eerste deel bespreken we de basisprincipes en kijken we naar verzoeken/antwoorden. In het volgende artikel zullen we kijken naar meer gedetailleerde functies, zoals caching, verbindingsverwerking en authenticatie.

Ook in dit artikel zal ik vooral verwijzen naar de RFC 2616-standaard: Hypertext Transfer Protocol -- HTTP/1.1.

HTTP-basisprincipes

HTTP maakt communicatie tussen meerdere hosts en clients mogelijk en ondersteunt een reeks netwerkinstellingen.

In principe wordt TCP/IP gebruikt voor de communicatie, maar dit is niet de enige mogelijke optie. Standaard gebruikt TCP/IP poort 80, maar andere kunnen ook worden gebruikt.

De communicatie tussen de host en de client vindt plaats in twee fasen: verzoek en antwoord. De client genereert een HTTP-verzoek, waarop de server een antwoord (bericht) geeft. Even later zullen we dit werkschema in meer detail bekijken.

De huidige versie van het HTTP-protocol is 1.1, waarin enkele nieuwe functies zijn geïntroduceerd. Naar mijn mening zijn de belangrijkste daarvan: ondersteuning voor een constant open verbinding, een nieuw mechanisme voor gegevensoverdracht, gefragmenteerde overdrachtscodering, nieuwe headers voor caching. We zullen hier iets van bekijken in het tweede deel van dit artikel.

URL

De kern van webcommunicatie is het verzoek, dat via de Uniform Resource Locator (URL) wordt verzonden. Ik weet zeker dat je al weet wat een URL is, maar voor de volledigheid heb ik besloten een paar woorden te zeggen. De URL-structuur is heel eenvoudig en bestaat uit de volgende componenten:

Het protocol kan http zijn voor reguliere verbindingen of https voor een veiligere gegevensuitwisseling. De standaardpoort is 80. Dit wordt gevolgd door het pad naar de bron op de server en een reeks parameters.

Methoden

Met behulp van een URL bepalen we de exacte naam van de host waarmee we willen communiceren, maar welke actie we moeten uitvoeren, kan alleen worden gecommuniceerd met met behulp van HTTP methode. Uiteraard zijn er verschillende soorten acties die we kunnen ondernemen. HTTP implementeert de meest noodzakelijke, geschikt voor de behoeften van de meeste applicaties.

Bestaande methoden:

KRIJGEN: toegang tot een bestaande bron. De URL vermeldt alle noodzakelijke informatie zodat de server de gevraagde bron kan vinden en als antwoord kan retourneren.

NA: Wordt gebruikt om een ​​nieuwe bron te maken. Een POST-verzoek bevat meestal alles Nodige informatie om een ​​nieuwe hulpbron te creëren.

NEERZETTEN: update huidige bron. PUT-verzoek bevat bijgewerkte gegevens.

VERWIJDEREN: wordt gebruikt om een ​​bestaande bron te verwijderen.

Deze methoden zijn het populairst en het meest gebruikt diverse instrumenten en kaders. In sommige gevallen worden PUT- en DELETE-verzoeken verzonden via POST versturen, waarvan de inhoud de actie aangeeft die met de bron moet worden uitgevoerd: aanmaken, bijwerken of verwijderen.

HTTP ondersteunt ook andere methoden:

HOOFD: gelijk aan GET. Het verschil is dat bij dit type verzoek geen bericht wordt verzonden. De server ontvangt alleen de headers. Wordt bijvoorbeeld gebruikt om te bepalen of een resource is gewijzigd.

SPOOR: tijdens de verzending passeert het verzoek vele toegangspunten en proxyservers, die elk hun eigen informatie invoeren: IP, DNS. Met deze methode kunt u alle tussentijdse informatie bekijken.

OPTIES: wordt gebruikt om servermogelijkheden, instellingen en configuratie voor een specifieke bron te definiëren.

Statuscodes

Als reactie op een verzoek van de client stuurt de server een antwoord, dat tevens een statuscode bevat. Deze code heeft een speciale betekenis, zodat de cliënt duidelijker kan begrijpen hoe hij het antwoord moet interpreteren:

1xx: Informatieberichten

Een reeks van deze codes is geïntroduceerd in HTTP/1.1. De server kan een verzoek verzenden in de vorm: Expect: 100-continu, wat betekent dat de client de rest van het verzoek nog steeds verzendt. Clients met HTTP/1.0 negeren deze headers.

2xx: Succesberichten

Als de klant een code uit de 2xx-serie heeft ontvangen, is de aanvraag succesvol verzonden. De meest voorkomende optie is 200 OK. Bij een GET-verzoek verzendt de server een antwoord in de hoofdtekst van het bericht. Er zijn ook andere mogelijke antwoorden:

  • 202 Geaccepteerd: Het verzoek wordt geaccepteerd, maar bevat mogelijk niet de bron in het antwoord. Dit is handig voor asynchrone verzoeken aan de serverkant. De server bepaalt of de bron moet worden verzonden of niet.
  • 204 Geen inhoud: Er staat geen bericht in de antwoordtekst.
  • 205 Inhoud resetten: Instrueert de server om de presentatie van het document opnieuw in te stellen.
  • 206 Gedeeltelijke inhoud: Het antwoord bevat slechts een deel van de inhoud. Extra headers bepalen de totale lengte van de inhoud en andere informatie.

3xx: Omleiding

Een soort boodschap aan de klant over de noodzaak om nog een actie te ondernemen. De meest voorkomende gebruikssituatie is het omleiden van de client naar een ander adres.

  • 301 is permanent verhuist: De bron is nu te vinden op een andere URL.
  • 303 Zie Overige: De bron is tijdelijk te vinden op een andere URL. De locatieheader bevat een tijdelijke URL.
  • 304 Niet gewijzigd: De server stelt vast dat de bron niet is gewijzigd en dat de client de in de cache opgeslagen versie van het antwoord moet gebruiken. Om de identiteit van informatie te controleren wordt gebruik gemaakt van ETag (Entity Tag hash);

4xx: Clientfouten

Deze berichtklasse wordt door de server gebruikt als deze besluit dat het verzoek ten onrechte is verzonden. Meest voorkomende code: 404 Niet gevonden. Dit betekent dat de bron niet op de server is gevonden. Andere mogelijke codes:

  • 400 Slecht verzoek: De vraag is verkeerd gevormd.
  • 401 Ongeautoriseerd: Authenticatie is vereist om een ​​verzoek in te dienen. Informatie wordt verzonden via de Autorisatie-header.
  • 403 verboden: De server heeft geen toegang tot de bron toegestaan.
  • 405 Methode niet toegestaan: niet correct HTTP-methode werd gebruikt om toegang te krijgen tot de bron.
  • 409 Conflicten: de server kan het verzoek niet volledig verwerken omdat probeert een nieuwere versie van een bron te wijzigen. Dit gebeurt vaak bij PUT-verzoeken.

5xx: Serverfouten

Een reeks codes die worden gebruikt om een ​​serverfout te detecteren bij het verwerken van een verzoek. Meest voorkomend: 500 Intern Serverfout. Andere opties:

  • 501 Niet geïmplementeerd: De server ondersteunt de gevraagde functionaliteit niet.
  • 503 Service niet beschikbaar: Dit kan gebeuren als de server een fout heeft of overbelast is. Meestal reageert de server in dit geval niet en verstrijkt de tijd die voor het antwoord is gegeven.

Berichtformaten voor verzoeken/antwoorden

In de volgende afbeelding ziet u een schematisch proces van het verzenden van een verzoek door de client, het verwerken en verzenden van een antwoord door de server.

Laten we eens kijken naar de structuur van een bericht dat via HTTP wordt verzonden:

Bericht = *() CRLF [ ] = Aanvraagregel | Statuslijn = Veldnaam jpg Veldwaarde

Tussen de koptekst en de hoofdtekst van het bericht moet er een lege regel. Er kunnen verschillende kopjes zijn:

De antwoordtekst kan bevatten volledige informatie of een deel ervan, als de overeenkomstige functie is geactiveerd (Transfer-Encoding: chunked). HTTP/1.1 ondersteunt ook de Transfer-Encoding-header.

Algemene rubrieken

Hier volgen verschillende typen headers die in zowel verzoeken als antwoorden worden gebruikt:

Algemene header = Cache-Control | Verbinding | Datum | Pragma | Aanhangwagen | Overdrachtcodering | Opwaarderen | Via | Waarschuwing

Een aantal zaken hebben we in dit artikel al besproken, andere zullen we in het tweede deel in meer detail bespreken.

De via-header wordt gebruikt in een TRACE-verzoek en wordt bijgewerkt door alle proxyservers.

De Pragma-header wordt gebruikt om aangepaste headers weer te geven. Pragma: no-cache is bijvoorbeeld hetzelfde als Cache-Control: no-cache. We zullen hier meer over vertellen in deel twee.

De Date-header wordt gebruikt om de datum en tijd van het verzoek/antwoord op te slaan.

De Upgrade-header wordt gebruikt om het protocol te wijzigen.

Transfer-Encoding is bedoeld om het antwoord in meerdere delen te splitsen met behulp van Transfer-Encoding: chunked. Dit is een nieuwe functie in HTTP/1.1.

Entiteitskoppen

Entiteitsheaders geven meta-informatie over de inhoud weer:

Entiteitsheader = Toestaan ​​| Inhoudscodering | Inhoud-Taal | Inhoud-lengte | Inhoud-locatie | Inhoud-MD5 | Inhoudsbereik | Inhoudstype | Verloopt | Laatst gewijzigd

Alle headers voorafgegaan door Content- geven informatie over de structuur, codering en grootte van de berichttekst.

De kop Expires bevat de vervaltijd en -datum van de entiteit. De waarde “verloopt nooit” betekent tijd + 1 code vanaf het huidige moment. Laatst gewijzigd bevat de tijd en datum waarop de entiteit voor het laatst is gewijzigd.

Met behulp van deze headers kunt u de informatie opgeven die nodig is voor uw taken.

Aanvraagformaat

Het verzoek ziet er ongeveer zo uit:

Request-Line = Methode SP URI SP HTTP-versie CRLF Methode = "OPTIES" | "HOOFD" | "KRIJG" | "POST" | "ZET" | "VERWIJDEREN" | "SPOOR"

SP is het scheidingsteken tussen tokens. De HTTP-versie wordt gespecificeerd in HTTP-versie. Het daadwerkelijke verzoek ziet er als volgt uit:

GET /articles/http-basics HTTP/1.1 Host: www.articles.com Verbinding: keep-alive Cache-Control: no-cache Pragma: no-cache Accepteren: text/html,application/xhtml+xml,application/xml; q=0,9,*/*;q=0,8

Lijst met mogelijke verzoekheaders:

Verzoekheader = Accepteren | Accepteren-tekenset | Accepteren-codering | Accepteren-Taal | Autorisatie | Verwacht | Van | Gastheer | Als-match | Indien-gewijzigd-sinds | Als-geen-overeenkomst | Als-bereik | Als-ongewijzigd-sinds | Max-voorwaarts | Proxy-autorisatie | Bereik | Verwijzer | TE | Gebruiker-agent

De Accept-header specificeert het ondersteunde mime-types, taal, karaktercodering. De headers From, Host, Referer en User-Agent bevatten informatie over de client. If-voorvoegsels zijn bedoeld om voorwaarden te creëren. Als aan de voorwaarde niet wordt voldaan, zal er een 304 Not Modified-fout optreden.

Antwoordformaat

Het antwoordformaat verschilt alleen in de status en een aantal headers. De status ziet er als volgt uit:

Statusregel = HTTP-versie SP Statuscode SP Redenzin CRLF

  • HTTP-versie
  • Status code
  • Voor mensen leesbaar statusbericht

De normale status ziet er ongeveer zo uit:

HTTP/1.1 200 OK

De antwoordheaders kunnen als volgt zijn:

Reactieheader = Accepteerbereiken | Leeftijd | ETag | Locatie | Proxy-authenticeren | Opnieuw proberen na | Serveer | Varieer | WWW-authenticeren

  • Leeftijd is de tijd in seconden waarop het bericht op de server is aangemaakt.
  • ETag MD5-entiteiten om te controleren op wijzigingen en aanpassingen aan het antwoord.
  • Locatie wordt gebruikt voor omleiding en bevat de nieuwe URL.
  • Server specificeert de server waarop het antwoord is gegenereerd.

Ik denk dat dit genoeg theorie is voor vandaag. Laten we nu eens kijken naar de tools die we kunnen gebruiken om HTTP-berichten te monitoren.

Hulpmiddelen voor het detecteren van HTTP-verkeer

Er zijn veel tools voor het monitoren van HTTP-verkeer. Hier zijn er een paar:

De meest gebruikte is Chrome Developers Tools:

Als we het over een debugger hebben, kun je Fiddler gebruiken:

Om HTTP-verkeer te monitoren heb je curl, tcpdump en tshark nodig.

Bibliotheken voor het werken met HTTP - jQuery AJAX

Omdat jQuery zo populair is, beschikt het ook over tools voor het verwerken van HTTP-reacties op AJAX-verzoeken. Informatie over jQuery.ajax (instellingen) is te vinden op de officiële website.

Door een instellingenobject door te geven en de callback-functie beforeSend te gebruiken, kunnen we de verzoekheaders instellen met behulp van de setRequestHeader() -methode.

$.ajax(( url: "http://www.articles.com/latest", type: "GET", beforeSend: function (jqXHR) ( jqXHR.setRequestHeader("Accepts-Language", "en-US,en "); ) ));

Als u de aanvraagstatus wilt verwerken, kunt u dit als volgt doen:

$.ajax(( statusCode: ( 404: function() ( alert("pagina niet gevonden"); ) ) ));

Kortom

Hier is het, een rondleiding door de basisprincipes van het HTTP-protocol. In het tweede deel zullen er nog meer zijn interessante feiten en voorbeelden.

Taal, enz. Dankzij de mogelijkheid om te specificeren hoe een bericht wordt gecodeerd, kunnen de client en de server binaire gegevens uitwisselen, ook al is dit protocol op tekst gebaseerd.

Voordelen

Eenvoud

Het protocol is zo eenvoudig te implementeren dat het eenvoudig is om clientapplicaties te maken.

Uitbreidbaarheid

U kunt de mogelijkheden van het protocol eenvoudig uitbreiden door uw eigen headers te implementeren, terwijl de compatibiliteit met andere clients en servers behouden blijft. Ze negeren headers die voor hen onbekend zijn, maar tegelijkertijd kun je de functionaliteit krijgen die je nodig hebt bij het oplossen van een specifiek probleem.

Prevalentie

Bij het kiezen van het HTTP-protocol voor een oplossing specifieke taken Een belangrijke factor is de prevalentie ervan. Als gevolg hiervan is dit een overvloed aan verschillende documentatie over het protocol in vele talen van de wereld, de opname van eenvoudig te gebruiken ontwikkeltools in populaire IDE's, ondersteuning voor het protocol als client in veel programma's, en een ruime keuze uit hostingbedrijven met HTTP-servers.

Nadelen en problemen

Grote berichtgrootte

Gebruik tekst formaat in het protocol geeft aanleiding tot het overeenkomstige nadeel: grote maat berichten versus het verzenden van binaire gegevens. Hierdoor neemt de belasting van de apparatuur bij het genereren, verwerken en verzenden van berichten toe. Om dit probleem op te lossen, bevat het protocol ingebouwde middelen voor caching aan de clientzijde, evenals middelen voor het comprimeren van de verzonden inhoud. Regelgevende documenten voor het protocol voorzien in de aanwezigheid van proxyservers, waardoor de klant een document kan ontvangen van de server die het dichtst bij hem in de buurt is. Ook werd deltacodering in het protocol geïntroduceerd, zodat niet het hele document naar de klant werd verzonden, maar alleen het gewijzigde deel ervan.

Gebrek aan "navigatie"

Hoewel het protocol is ontworpen als een manier om met serverbronnen te werken, biedt het niet expliciet een manier om tussen deze bronnen te navigeren. De client kan bijvoorbeeld niet expliciet een lijst met beschikbare bestanden opvragen, zoals in . Er werd aangenomen dat de eindgebruiker de hyperlinks al kende. Dit is heel normaal en handig voor mensen, maar het is moeilijk als het de taak is om alle serverbronnen automatisch te verwerken en analyseren zonder menselijke tussenkomst. De oplossing voor dit probleem ligt volledig op de schouders van applicatieontwikkelaars die dit protocol gebruiken.

Geen distributieondersteuning

Het HTTP-protocol is ontwikkeld om typische alledaagse problemen op te lossen, waarbij de verwerkingstijd van het verzoek zelf weinig tijd in beslag neemt of helemaal geen rekening mee houdt. Maar in industrieel gebruik Door het gebruik van gedistribueerd computergebruik en de hoge belasting van de server is het HTTP-protocol hulpeloos. In 1998 stelde het W3C een alternatief protocol voor HTTP-NG(Engels) HTTP volgende generatie) Voor volledige vervanging verouderd met een focus op dit gebied. Het idee van de noodzaak ervan werd gesteund door grote specialisten op het gebied van gedistribueerd computergebruik, maar dit protocol bevindt zich nog in de ontwikkelingsfase.

Software

Alle software voor het werken met het HTTP-protocol is onderverdeeld in drie grote categorieën:

  • Servers als de belangrijkste aanbieders van informatieopslag- en verwerkingsdiensten (verzoekverwerking).
  • Klanten- eindgebruikers van serverdiensten (een verzoek verzenden).
  • Volmacht vervoersdiensten uit te voeren.

Om eindservers van proxy's te onderscheiden, wordt in de officiële documentatie de term gebruikt oorsprong server(Engels) Origin-server). Natuurlijk hetzelfde software kan gelijktijdig de functies van een client, server of intermediair vervullen, afhankelijk van de toegewezen taken. De HTTP-protocolspecificaties beschrijven het gedrag voor elk van deze rollen.

Klanten

Het HTTP-protocol is oorspronkelijk ontwikkeld voor toegang tot hypertekstdocumenten op het World Wide Web. Daarom zijn de belangrijkste klantimplementaties dat wel browsers(gebruikersagenten). Populaire browsers(V alfabetische volgorde): Chrome, Internet Explorer, Mozilla Firefox, Safari.

Zie ook: Lijst met browsers en Browservergelijking

Om de opgeslagen inhoud van sites op een computer zonder internetverbinding te bekijken, zijn ze uitgevonden offline browsers. Onder de beroemde. Hiermee kunt u op elk gewenst moment specifieke bestanden downloaden nadat de verbinding met de webserver is verbroken. Populaire programma's in Windows OS zijn Download Master, Free Beheerder downloaden, ReGet. In KGet en d4x (Downloader voor X). Veel Linux-gebruikers gebruiken liever NASA World Wind, dat ook HTTP gebruikt.

Het HTTP-protocol wordt vaak door programma's gebruikt om updates te downloaden.

In internetzoekmachines wordt een hele reeks robotprogramma's gebruikt. Onder hen webspinnen(crawlers) die hyperlinks volgen, een database met serverbronnen samenstellen en de inhoud ervan opslaan voor verdere analyse.

Zie ook: Lijst met zoekmachines, Internetarchief

Origin-servers

Belangrijkste implementaties: internet Informatie diensten(IIS), nginx.

Zie ook: Lijst met webservers

Proxy-servers

Belangrijkste implementaties: UserGate, Multiproxy, Naviscope, Lijst met webservers

Geschiedenis van ontwikkeling

HTTP/0.9

HTTP/1.0

HTTP/1.1

De huidige versie van het protocol werd in juni aangenomen. Nieuw in deze versie was de “permanente verbinding”-modus: Startlijn) - bepaalt het type bericht;

  • Koppen Kopteksten) - karakteriseer de berichttekst, transmissieparameters en andere informatie;
  • Bericht lichaam bericht lichaam) - berichtgegevens zelf. Moet door een witregel van de kopteksten worden gescheiden.
  • De berichtkoppen en de hoofdtekst ontbreken mogelijk, maar de startregel is dat wel verplicht element, omdat dit het verzoek/antwoordtype aangeeft. Een uitzondering hierop is versie 0.9 van het protocol, waarin het verzoekbericht alleen de startregel bevat en het antwoordbericht alleen de hoofdtekst van het bericht.

    Startlijn

    De startlijnen zijn verschillend voor het verzoek en het antwoord. De queryreeks ziet er als volgt uit:

    KRIJGEN URI- voor protocolversie 0.9. Methode URI HTTP/ Versie- voor andere versies.

    Om een ​​pagina voor een bepaald artikel aan te vragen, moet de klant de volgende string doorgeven:

    KRIJG /wiki/Http HTTP/1.0

    De startregel van het serverantwoord heeft het volgende formaat:

    HTTP/ Versie Status code Uitleg

    • Versie- een paar Arabische cijfers gescheiden door een punt, zoals in het verzoek.
    • Status code(Engels) Status code) - drie Arabische cijfers. De statuscode bepaalt de verdere inhoud van het bericht en het gedrag van de cliënt.
    • Uitleg(Engels) Reden zin) - een korte tekstuitleg van de responscode voor de gebruiker. Heeft op geen enkele wijze invloed op de boodschap en is optioneel.

    De server reageerde bijvoorbeeld op ons eerdere verzoek van de client voor deze pagina met de regel:

    HTTP/1.0 200 Oké

    Methoden

    OPTIES

    Wordt gebruikt om de mogelijkheden van de webserver of verbindingsparameters voor een specifieke bron te bepalen. De server MOET een Allow-header in zijn antwoord opnemen met een lijst met ondersteunde methoden. De antwoordheaders kunnen ook informatie bevatten over ondersteunde extensies.

    Er wordt verwacht dat het verzoek van de klant een berichttekst kan bevatten om aan te geven in welke informatie hij geïnteresseerd is. Lichaamsformaat en procedure om ermee te werken momenteel ongedefinieerd. De server moet het voorlopig negeren. De situatie is vergelijkbaar met de body in het serverantwoord.

    Om de mogelijkheden van de hele server te achterhalen, moet de client een asterisk - “*” in de URI opgeven. OPTIES * HTTP/1.1-verzoeken kunnen ook worden gebruikt om de gezondheid van de server te controleren (vergelijkbaar met pingen) en om te testen of de server HTTP-versie 1.1 ondersteunt.

    Het resultaat van deze methode wordt niet in de cache opgeslagen.

    KRIJGEN

    Wordt gebruikt om de inhoud van een opgegeven bron op te vragen. U kunt ook een proces starten met behulp van de GET-methode. In dit geval moet informatie over de voortgang van het proces worden opgenomen in de hoofdtekst van het antwoordbericht.

    De client kan aanvraaguitvoeringsparameters doorgeven in de doelbron-URI na de "? ":
    GET /pad/bron?param1=waarde1¶m2=waarde2 HTTP/1.1

    Volgens de HTTP-standaard worden verzoeken typ GET worden als idempotent beschouwd - het meerdere keren herhalen van hetzelfde GET-verzoek zou dezelfde resultaten moeten opleveren (op voorwaarde dat de bron zelf niet is veranderd in de tijd tussen verzoeken). Hierdoor kunnen antwoorden op GET-verzoeken in de cache worden opgeslagen.

    Naast de gebruikelijke GET-methode is er ook een onderscheid. Voorwaardelijke GET-aanvragen bevatten If-Modified-Since, If-Match, If-Range en soortgelijke headers. Gedeeltelijke GET's bevatten Range in het verzoek. De procedure voor het uitvoeren van dergelijke verzoeken wordt afzonderlijk gedefinieerd door de standaarden.

    HOOFD

    Vergelijkbaar met de GET-methode, behalve dat er geen hoofdtekst in het serverantwoord zit. Het HEAD-verzoek wordt doorgaans gebruikt om metagegevens op te halen, te controleren op het bestaan ​​van een bron (URL-validatie) en om te zien of deze is gewijzigd sinds deze voor het laatst werd geopend.

    Antwoordheaders kunnen in de cache worden opgeslagen. Als de metagegevens van een bron niet overeenkomen met de overeenkomstige informatie in de cache, wordt de kopie van de bron gemarkeerd als verouderd.

    NA

    Wordt gebruikt om gebruikersgegevens over te dragen naar een opgegeven bron. Op blogs kunnen bezoekers bijvoorbeeld doorgaans hun opmerkingen over berichten in een HTML-formulier invoeren, waarna ze naar de server worden gePLAATST en op de pagina worden geplaatst. In dit geval worden de verzonden gegevens (in het voorbeeld bij blogs de tekst van de opmerking) opgenomen in de hoofdtekst van het verzoek. Op dezelfde manier worden bestanden meestal geüpload met behulp van de POST-methode.

    In tegenstelling tot de GET-methode wordt de POST-methode niet als idempotent beschouwd, dat wil zeggen hetzelfde herhalen POST-verzoeken kan verschillende resultaten opleveren (nadat elke opmerking is ingediend, verschijnt er bijvoorbeeld één kopie van die opmerking).

    Als de uitvoeringsresultaten 200 (Ok) en 204 (Geen inhoud) zijn, moet een bericht over het resultaat van het verzoek worden opgenomen in de antwoordtekst. Als er een bron is gemaakt, MOET de server een 201 (aangemaakt) antwoord retourneren met de URI van de nieuwe bron in de locatieheader.

    Het serverantwoordbericht op de POST-methode wordt niet in de cache opgeslagen.

    NEERZETTEN

    Wordt gebruikt om de aanvraaginhoud te laden naar de URI die in de aanvraag is opgegeven. Als er geen bron aanwezig is op de opgegeven URI, maakt de server deze aan en retourneert status 201 (Aangemaakt). Als de bron is gewijzigd, retourneert de server 200 (Ok) of 204 (Geen inhoud). De server MOET ongeldige Content-* headers die door de client samen met het bericht zijn verzonden NIET negeren. Als een van deze headers niet kan worden herkend of onder de huidige omstandigheden niet geldig is, moet de foutcode 501 (Niet geïmplementeerd) worden geretourneerd.

    Het fundamentele verschil tussen de POST- en PUT-methoden is het begrip van het doel van de resource-URI. De POST-methode gaat ervan uit dat de opgegeven URI de door de client verzonden inhoud verwerkt. Door PUT te gebruiken, gaat de client ervan uit dat de inhoud die wordt gedownload overeenkomt met de bron die zich op de opgegeven URI bevindt.

    Serverantwoordberichten op de PUT-methode worden niet in de cache opgeslagen.

    LAPJE

    Vergelijkbaar met PUT, maar alleen van toepassing op een deel van de bron.

    VERWIJDEREN

    Verwijdert de opgegeven bron.

    SPOOR

    Retourneert het ontvangen verzoek zodat de client kan zien welke tussenliggende servers het verzoek toevoegen of wijzigen.

    AANSLUITEN

    Voor gebruik met proxyservers die dynamisch naar de tunnelmodus kunnen overschakelen

    KOPPELING

    Brengt een verbinding tot stand tussen de opgegeven bron en andere.

    ONTKOPPELEN

    Verwijdert de verbinding van de opgegeven bron met anderen.

    Statuscodes

    De statuscode maakt deel uit van de eerste regel van het serverantwoord. Het vertegenwoordigt een geheel getal van 3 Arabische cijfers. Het eerste cijfer geeft aan staat klasse. De responscode wordt meestal gevolgd door een verklarende zin, gescheiden door een spatie. de Engelse taal, wat de reden voor dit specifieke antwoord aangeeft.

    De klant leert uit de responscode over de resultaten van zijn verzoek en bepaalt welke acties vervolgens moeten worden ondernomen. De set statuscodes is een standaard en wordt allemaal beschreven in de relevante IETF-documenten. De client kent mogelijk niet alle statuscodes, maar moet reageren volgens de klasse van de code.

    Er zijn momenteel vijf klassen statuscodes.

    1xx Informatief (Russisch) Informatief) Deze klasse bevat codes die informatie geven over het overdrachtsproces. In HTTP/1.0 moeten berichten met dergelijke codes worden genegeerd. In HTTP/1.1 moet de client bereid zijn deze klasse berichten als een normaal antwoord te accepteren, maar hoeft hij niets naar de server te sturen. De berichten zelf van de server bevatten alleen de startregel van het antwoord en, indien nodig, enkele antwoordspecifieke headervelden. Proxyservers moeten dergelijke berichten verder van de server naar de client sturen. 2xx Succes (Russisch) Met succes) Berichten van deze klasse informeren over gevallen van succesvolle acceptatie en verwerking van een klantverzoek. Afhankelijk van de status kan de server ook de headers en de hoofdtekst van het bericht verzenden. 3xx Omleiding (Russisch) Omleiding ) Klasse 3xx-statuscodes vertellen de client dat het volgende verzoek naar een andere URI moet worden gedaan om de bewerking te laten slagen. In de meeste gevallen wordt het nieuwe adres aangegeven in het veld Locatie van de kop. In dit geval moet de klant dit in de regel doen automatische overgang(jarg. omleiden). Houd er rekening mee dat wanneer u de volgende bron opent, u een antwoord kunt krijgen van dezelfde codeklasse. Er kan zelfs sprake zijn van een lange keten van omleidingen die, als ze automatisch worden uitgevoerd, een overmatige belasting van de apparatuur zouden veroorzaken. Daarom raden de ontwikkelaars van het HTTP-protocol ten zeerste aan dat u na de tweede reactie op rij een bevestiging van de omleiding van de gebruiker moet vragen (voorheen werd dit na de 5e aanbevolen). De client is verantwoordelijk voor het monitoren hiervan, aangezien de huidige server de client kan omleiden naar een bron op een andere server. De klant moet ook voorkomen dat hij in circulaire omleidingen terechtkomt. 4xx Clientfout (Russisch) Klantfout) De codeklasse 4xx is bedoeld om fouten aan de clientzijde aan te geven. Wanneer alle methoden behalve HEAD worden gebruikt, moet de server een hypertext-uitleg terugsturen naar de gebruiker in de hoofdtekst van het bericht. Om de waarden van codes van 400 tot 417 te onthouden, zijn er methoden voor illustratieve geheugensteuntjes 5xx Server Error (Russisch. Serverfout) Codes 5xx worden toegewezen voor gevallen van mislukte bediening vanwege een fout van de server. Voor alle andere situaties dan het gebruik van de HEAD-methode moet de server in de hoofdtekst van het bericht een uitleg opnemen die de client aan de gebruiker zal tonen.

    Koppen

    Bericht lichaam

    Voorbeelden van HTTP-dialoogvensters

    Regelmatig GET-verzoek

    Klantverzoek:

    KRIJG /wiki/ bladzijde HTTP/1.1 Host: ru.wikipedia.org User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Accepteren: tekst/html Verbinding: sluiten

    Serverreactie:

    HTTP/1.0 200 OK Datum: wo, 11 februari 2009 11:20:59 GMT Server: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 Laatst gewijzigd: wo, 11 februari 2009 11:20:59 GMT Inhoud -Taal: ru Inhoudstype: tekst/html; charset=utf-8 Inhoudslengte: 1234 Verbinding: sluiten (het volgende is de gevraagde pagina in

    Omleidingen

    Laten we zeggen dat het fictieve bedrijf Voorbeeld Corp. er is een hoofdsite op http://example.com en een aliasdomein example-corp.com. De client stuurt een verzoek voor de Over-pagina naar het secundaire domein (sommige headers zijn weggelaten):

    Locatie: http://www.example.com/about.html#contacts Datum: do, 19 februari 2009 11:08:01 GMT Server: Apache/2.2.4 Inhoudstype: text/html; charset=windows-1251 Inhoudslengte: 110 (lege regel) Klik hier

    In de locatiekop kun je fragmenten opgeven zoals in dit voorbeeld. De browser heeft het fragment niet in het verzoek opgenomen, omdat deze geïnteresseerd is in het gehele document. Maar het zal automatisch door de pagina scrollen naar het fragment “contacten” zodra het wordt geladen. De antwoordtekst bevatte ook een kort HTML-document met een link die de bezoeker naar de landingspagina brengt als de browser daar niet automatisch naartoe gaat. Koptekst Inhoudstype bevat kenmerken van deze specifieke HTML-uitleg, en niet van het document dat zich op de doel-URL bevindt.

    Laten we zeggen dat hetzelfde bedrijf Voorbeeld Corp. heeft verschillende regionale kantoren over de hele wereld. En voor elk vertegenwoordigingskantoor hebben ze een website met de bijbehorende ccTLD. Een verzoek voor de hoofdpagina van de hoofdsite example.com kan er als volgt uitzien:

    / HTTP/1.1 Host: www.example.com User-Agent: MyLonelyBrowser/5.0 Accepteren: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accepteren-taal: ru ,en-us;q=0.7,en;q=0.3 Accepteer tekenset: windows-1251,utf-8;q=0.7,*;q=0.7

    De server hield rekening met de Accept-Language-header en genereerde een antwoord met een tijdelijke omleiding naar de Russische server example.ru, waarbij het adres ervan werd aangegeven in de Location-header:

    HTTP/1.x 302 gevonden Locatie: http://www.example.ru/ Cache-Control: privé Datum: do, 19 februari 2009 11:08:01 GMT Server: Apache/2.2.6 Inhoudstype: text/html; charset=windows-1251 Inhoudslengte: 82 (lege regel) Voorbeeld Corp. Rusland

    Let op de Cache-Control-header. De 'private'-waarde vertelt andere servers (voornamelijk proxy's) dat het antwoord aan de clientzijde in de cache kan worden opgeslagen. Anders is het mogelijk dat volgende bezoekers uit andere landen altijd naar een ander vertegenwoordigingskantoor gaan.

    Voor de doorverwijzing worden tevens de responscodes (Zie Overige) en (Tijdelijke Omleiding) gebruikt.

    Hervatten en fragmentarisch downloaden

    Laten we zeggen dat een fictieve organisatie aanbiedt een video van een eerdere conferentie te downloaden van de website http://example.org/conf-2009.avi met een volume van ongeveer 160 MB. Laten we eens kijken hoe dit bestand wordt gedownload in geval van een storing en hoe de downloadmanager het multi-threaded downloaden van verschillende fragmenten zou organiseren.

    In beide gevallen zullen klanten hun eerste verzoek als volgt indienen:

    GET /conf-2009.avi HTTP/1.0 Host: example.org Accepteren: */* User-Agent: Mozilla/4.0 (compatibel; MSIE 5.0; Windows 98) Verwijzing: http://example.org/

    De Referer-header geeft aan dat het bestand is opgevraagd vanaf de startpagina van de site. Downloadmanagers geven dit meestal ook aan om een ​​overgang van een websitepagina te emuleren. Zonder dit kan de server reageren (Toegang verboden) als verzoeken van andere sites niet zijn toegestaan. In ons geval heeft de server een succesvol antwoord geretourneerd:

    HTTP/1.1 200 OK Datum: donderdag 19 februari 2009 12:27:04 GMT Server: Apache/2.2.3 Laatst gewijzigd: woensdag 18 juni 2003 16:05:58 GMT ETag: "56d-9989200-1132c580" Inhoud -Type: video/x-msvideo Inhoud-lengte: 160993792 Accepteerbereiken: bytes Verbinding: dichtbij (lege regel) (binaire inhoud van het gehele bestand)

    De Accept-Ranges-header informeert de client dat deze fragmenten van de server kan opvragen, waarbij de offsets vanaf het begin van het bestand in bytes worden aangegeven. Als deze header ontbreekt, kan de client de gebruiker waarschuwen dat het hoogstwaarschijnlijk niet mogelijk zal zijn om het bestand te downloaden. Op basis van de waarde van de Content-Length-header verdeelt de downloadmanager het volledige volume in gelijke fragmenten en vraagt ​​deze afzonderlijk op, waarbij verschillende threads worden georganiseerd. Als de server de grootte niet specificeert, kan de client geen parallel downloaden implementeren, maar kan hij tegelijkertijd doorgaan met het downloaden van het bestand totdat de server reageert (Requested Range Not Satisfiable).

    Laten we zeggen dat bij 84 megabyte de internetverbinding werd onderbroken en het downloadproces werd onderbroken. Toen de internetverbinding werd hersteld, stuurde de browser automatisch een nieuw verzoek naar de server, maar met instructies om de inhoud van de 84e megabyte terug te sturen:

    GET /conf-2009.avi HTTP/1.0 Host: example.org Accepteren: */* User-Agent: Mozilla/4.0 (compatibel; MSIE 5.0; Windows 98) Bereik: bytes=88080384- Verwijzer: http://example.org/

    De server hoeft niet te onthouden wat en van wie de eerdere verzoeken waren, en dus heeft de client de Referer-header opnieuw ingevoegd alsof het zijn allereerste verzoek was. Opgegeven waarde De Range-header vertelt de server “geef de inhoud van de 88080384e byte tot het einde.” In dit verband zal de server het volgende antwoord retourneren:

    HTTP/1.1 206 Gedeeltelijke inhoud Datum: donderdag 19 februari 2009 12:27:08 GMT Server: Apache/2.2.3 Laatst gewijzigd: woensdag 18 juni 2003 16:05:58 GMT ETag: "56d-9989200-1132c580" Accepteerbereiken: bytes Inhoudsbereik: bytes 88080384-160993791/160993792 Inhoud-lengte: 72913408 Verbinding: sluiten Inhoudstype: video/x-msvideo (lege regel) (binaire inhoud vanaf 84 megabytes)

    De Accept-Ranges header is hier niet langer nodig, omdat de client al op de hoogte is van deze servermogelijkheden. De klant leert dat er een fragment wordt verzonden door de code (Gedeeltelijke inhoud). De Content-Range-header bevat informatie over dit fragment: de nummers van de begin- en eindbytes, en na de schuine streep - de totale grootte van het gehele bestand in bytes. Let op de Content-Length-header: deze geeft de grootte van de berichttekst aan, dat wil zeggen het verzonden fragment. Als de server meerdere fragmenten retourneert, bevat Content-Length het totale volume ervan.

    Laten we nu terugkeren naar de downloadmanager. Omdat het programma de totale grootte van het bestand "conf-2009.avi" kende, verdeelde het programma het in 10 gelijke secties. De manager laadt de eerste op het allereerste verzoek en verbreekt de verbinding zodra deze het begin van de tweede bereikt. De rest vraagt ​​hij apart aan. De 4e sectie wordt bijvoorbeeld opgevraagd met de volgende headers (sommige headers zijn weggelaten - zie volledig voorbeeld hoger):

    KRIJG /conf-2009.avi HTTP/1.0 Bereik: bytes=64397516-80496894

    Het antwoord van de server zal in dit geval als volgt zijn (sommige headers zijn weggelaten - zie het volledige voorbeeld hierboven):

    HTTP/1.1 206 Gedeeltelijke inhoud Accepteerbereiken: bytes Inhoudsbereik: bytes 64397516-80496894/160993792 Inhoud-lengte: 16099379 (lege regel) (binaire inhoud van deel 4)

    Als een dergelijk verzoek naar een server wordt verzonden die geen fragmenten ondersteunt, retourneert deze een standaardantwoord (OK) zoals helemaal aan het begin wordt weergegeven, maar zonder de Accept-Ranges-header.

    Zie ook bytebereiken, antwoord 406, antwoord 416.

    Basisprotocolmechanismen

    Gedeeltelijke GET's

    Met HTTP kunt u niet de volledige inhoud van een bron in één keer opvragen, maar slechts een specifiek fragment. Dergelijke verzoeken worden genoemd gedeeltelijke GET's, is de mogelijkheid om ze uit te voeren optioneel (maar wenselijk) voor servers. Gedeeltelijke GET's worden voornamelijk gebruikt voor het hervatten van bestanden en snelle parallelle downloads in meerdere threads. Sommige programma's downloaden de archiefkop, geven de interne structuur aan de gebruiker weer en vragen vervolgens fragmenten op met de opgegeven archiefelementen.

    Om een ​​fragment te ontvangen, stuurt de client een verzoek naar de server met een Range-header, waarin hij het nodige aangeeft bytebereiken. Als de server gedeeltelijke verzoeken niet begrijpt (de Range-header negeert), retourneert hij de volledige inhoud met de status , zoals bij een reguliere GET . Als dit lukt, retourneert de server een antwoord met status 206 (Gedeeltelijke inhoud) in plaats van code 200, inclusief de Content-Range-header in het antwoord. De fragmenten zelf kunnen op twee manieren worden verzonden:

    Zie ook .

    Voorwaardelijke GET

    Onderhandeling over inhoud

    Onderhandeling over inhoud(Engels) Onderhandeling over inhoud) - mechanisme automatische detectie noodzakelijke bron wanneer er verschillende soorten documentversies zijn. De onderwerpen van coördinatie kunnen niet alleen serverbronnen zijn, maar ook geretourneerde pagina's met foutmeldingen (, enz.).

    Er zijn twee hoofdtypen goedkeuringen:

    • Serverbeheerd(Engels) Servergestuurd).
    • Klantgedreven(Engels) Agentgestuurd).

    Beide typen of elk afzonderlijk kunnen gelijktijdig worden gebruikt.

    De belangrijkste protocolspecificatie (RFC 2616) benadrukt ook de zogenaamde transparante goedkeuring(Engels) Transparant onderhandelen) als de voorkeursoptie voor het combineren van beide typen. Dit laatste mechanisme moet niet worden verward met onafhankelijke technologie Transparante inhoudsonderhandelingen (TCN, Russisch Transparante inhoudsonderhandelingen , zie RFC 2295), dat geen deel uitmaakt van het HTTP-protocol, maar er wel mee kan worden gebruikt. Beide hebben een aanzienlijk verschil in het werkingsprincipe en de betekenis zelf van het woord ‘transparant’ ( transparant). In de HTTP-specificatie betekent transparantie dat het proces onzichtbaar is voor de client en server, en in de TCN-technologie betekent transparantie de beschikbaarheid van een volledige lijst met bronopties voor alle deelnemers aan het gegevensleveringsproces.

    Serverbeheerd

    Als er meerdere versies van een bron zijn, kan de server de verzoekheaders van de client analyseren om te produceren wat volgens hem de meest geschikte versie is. De belangrijkste geanalyseerde headers zijn Accept, Accept-Charset, Accept-Encoding, Accept-Languages ​​en User-Agent. Het is raadzaam dat de server een Vary-header in het antwoord opneemt, die de parameters aangeeft waarmee de inhoud van de opgevraagde URI verschilt.

    De geografische locatie van de client kan worden bepaald aan de hand van het externe IP-adres.

    Servergestuurde onderhandeling heeft verschillende nadelen:

    • De server raadt alleen welke optie de meeste voorkeur heeft eindgebruiker, maar kan op dit moment niet precies weten wat er nodig is (bijvoorbeeld een versie in het Russisch of Engels).
    • Er worden veel Acceptgroepheaders verzonden, maar weinig bronnen met meerdere opties. Hierdoor wordt de apparatuur overmatig belast.
    • De gedeelde cache is beperkt in zijn vermogen om hetzelfde antwoord te geven op identieke verzoeken van verschillende gebruikers.
    • Het doorgeven van Accept-headers brengt ook de privacy van de gebruiker in gevaar doordat bepaalde informatie over de voorkeuren van de gebruiker wordt onthuld.

    Klantgedreven

    In dit geval wordt het inhoudstype alleen aan de clientzijde bepaald. Om dit te doen, retourneert de server met statuscode 300 (Meerdere keuzes) of 406 (Niet acceptabel) een lijst met opties waaruit de gebruiker de juiste selecteert. Klantgestuurde afstemming is goed als de inhoud op veel voorkomende manieren varieert (zoals taal en codering) en er een openbare cache wordt gebruikt. Het grootste nadeel: extra belasting, omdat je een extra aanvraag moet doen om de gewenste inhoud te krijgen.

    Transparante goedkeuring

    Deze onderhandeling is volledig transparant voor de client en server. In dit geval wordt er gebruik van gemaakt gedeelde cache, dat een lijst met opties bevat voor klantgestuurd onderhandelen. Als de cache al deze opties begrijpt, maakt hij zelf de keuze, zoals bij servergestuurde onderhandeling. Dit vermindert de belasting van de oorspronkelijke server en elimineert het extra verzoek van de client.

    De kern-HTTP-specificatie beschrijft het transparante onderhandelingsmechanisme niet in detail.

    Meerdere inhoud

    Hoofd artikel: hiërarchieën met het in elkaar nesten van elementen. De mediatypen multipart/* worden gebruikt om meerdere inhoud aan te duiden. Het werken met dergelijke typen wordt uitgevoerd volgens de algemene regels beschreven in RFC 2046 (tenzij anders gedefinieerd door een specifiek mediatype). Als de ontvanger niet weet hoe hij met het type moet omgaan, behandelt hij het op dezelfde manier als multipart/mixed .

    Aan de serverzijde kunnen als reactie hierop berichten met meerdere inhoud worden verzonden bij het aanvragen van meerdere bronfragmenten. In dit geval wordt het mediatype multipart/byteranges gebruikt.