Dette materiale er en del af serien "Introduktion til virksomhedsudvikling". Tidligere artikler: Del 3. HTTP/HTTPS - 1Hej! I dag lærer vi om HTTP- og HTTPS-protokollerne. Men først, lad os præcisere et punkt: vi taler om protokoller til at sende data over et netværk på OSI-modellens applikationsniveau. Du husker måske, at vi lærte OSI-modellen at kende i en af ​​de tidligere artikler. Hvis du ikke kan huske det, så er det her .

Hvad er en datakommunikationsprotokol?

Det er det, vi kalder det aftalte regelsæt, der tillader udviklere af forskellige tjenester at sende information i et format, som andre kan forstå. Du kan for eksempel bruge Google Chrome til at få information fra både Facebook og Twitter, fordi udviklerne sender dem ved hjælp af standard HTTP-protokollen, som gør det muligt for din browser at behandle dem. Ensartede regler er meget praktiske for folk, der udvikler serverdelen: der er mange biblioteker, der kan konvertere information for dig og sende den ved hjælp af den passende protokol. HTTP blev oprindeligt tænkt som en protokol til at sende HTML-sider. Sådan blev det brugt i lang tid, men nu bruger programmører det ofte til at sende både strenge og mediefiler. Generelt er denne protokol universelt accepteret og alsidig, og den er virkelig nem at bruge. Og nu vil vi undersøge, hvordan man bruger det.

Strukturen af ​​HTTP

Vi skal straks bemærke, at HTTP-protokollen kun består af tekst. Det, der interesserer os mest, er strukturen i denne tekst. Hver besked består af tre dele:
  1. Startlinje — Dette definerer nogle husholdningsdata.
  2. Overskrifter — Disse beskriver meddelelsesparametrene.
  3. Body — Dette er indholdet af beskeden. Brødteksten skal adskilles fra overskrifterne med en tom linje.
HTTP-protokollen bruges til at sende anmodninger til en server og modtage svar fra serveren. Parametrene for anmodninger og svar er lidt forskellige.

Sådan ser en simpel HTTP-anmodning ud:


GET / HTTP/1.1
Host: codegym.cc
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
Startlinjen angiver:
  • GET — Anmodningens metode
  • / — Anmodningens vej
  • HTTP/1.1 — Protokolversionen
Så kommer overskrifterne:
  • Vært — Værten, som anmodningen er rettet til
  • User-Agent — Klienten, der sender anmodningen
Meddelelsesteksten mangler. I en HTTP-anmodning kræves kun startlinjen og "Host"-headeren. Lad os nu se på alt et trin ad gangen. En HTTP-anmodning skal indeholde en eller anden metode. Der er ni af dem: GET, POST, PUT, OPTIONS, HEAD, PATCH, DELETE, TRACE, CONNECT. De mest almindelige er GET og POST. Disse to metoder vil være nok i starten. GET — Denne metode anmoder om indhold fra serveren. Derfor har anmodninger med GET-metoden ikke en meddelelsestekst. Men hvis du har brug for det, kan du sende parametre via stien (i startlinjen) i følgende format:

https://cdn.codegym.cc/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2
hvor codegym.cc er værten, /send er anmodningens sti, og ? er en separator, der angiver, at forespørgselsparametrene følger. Til sidst er nøgleværdi-par ("nøgle=værdi") opført, adskilt af et og-tegn. POST — Denne metode udgiver information på serveren. En POST-anmodning kan sende forskellige slags information: parametre som "nøgle=værdi"-par, JSON, HTML-kode eller endda filer. Alle oplysninger sendes i meddelelsens brødtekst. For eksempel:

POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: codegym.cc

{
  "Id": 12345,
  "User": "John"
}
Anmodningen sendes til codegym.cc/user/create/json, og protokolversionen er HTTP/1.1. "Accepter" angiver det svarformat klienten forventer at modtage. "Content-Type" angiver formatet på den meddelelsestekst, der blev sendt i anmodningen. "Content-Length" er antallet af tegn i brødteksten. En HTTP-anmodning kan indeholde mange forskellige overskrifter. For mere information, tag et kig på protokollens specifikation .

HTTP-svar

Efter at have modtaget en anmodning, behandler serveren den og sender et svar til klienten:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    <p>Hello World</p>
  </body>
</html>
Svarets startlinje indeholder protokolversionen (HTTP/1.1), statuskode (200) og statusbeskrivelse (OK). Dens overskrifter inkluderer typen og længden af ​​indholdet. Svarteksten indeholder HTML-kode, som browseren gengiver som en HTML-side.

Svarstatuskoder

Alt er klart med hensyn til meddelelsestekst og overskrifter, men vi bør sige et par ord om statuskoder. Svarstatuskoder er altid tre cifre. Det første ciffer i koden angiver kategorien for svaret:
  • 1xx — Oplysninger. Anmodningen blev modtaget. Serveren er klar til at fortsætte.
  • 2xx — Vellykket. Anmodningen blev modtaget, forstået og behandlet.
  • 3xx — Omdirigering. Yderligere handlinger skal udføres for at behandle anmodningen.
  • 4xx — Klientfejl. Anmodningen indeholder fejl eller overholder ikke protokollen.
  • 5xx — Serverfejl. Anmodningen var sammensat korrekt, men serveren kunne ikke behandle den.
Det andet og tredje ciffer i koden angiver et mere specifikt svar. For eksempel:
  • 200 OK — Anmodningen blev modtaget og behandlet.
  • 201 Oprettet — Anmodningen blev modtaget og behandlet med succes, hvilket resulterede i oprettelsen af ​​en ny ressource eller instans.
  • 301 Flyttet permanent — Den anmodede ressource blev flyttet permanent. Efterfølgende anmodninger til den skal gøres ved at bruge den nye adresse.
  • 307 Midlertidig omdirigering — Ressourcen er blevet flyttet midlertidigt. Indtil videre kan den tilgås ved hjælp af automatisk videresendelse.
  • 403 Forbudt — Anmodningen blev forstået, men autorisation er påkrævet.
  • 404 Not Found — Serveren fandt ikke ressourcen på denne adresse.
  • 501 Ikke implementeret — Serveren understøtter ikke den funktionalitet, der kræves for at svare på anmodningen.
  • 505 HTTP-version ikke understøttet — Serveren understøtter ikke den angivne version af HTTP-protokollen.
Udover svarstatuskoden sendes også en statusbeskrivelse. Dette hjælper med at tydeliggøre, hvad hver specifik status betyder. HTTP-protokollen er meget praktisk: den giver et stort antal headere, som du kan bruge til at arrangere meget fleksibel kommunikation mellem en klient og server. En fuldstændig overvejelse af alle anmodnings- og svaroverskrifter, anmodningsmetoder og svarstatuskoder ville være for meget for en enkelt artikel. Hvis du har brug for det, kan du læse protokollens officielle specifikation, som beskriver alle nuancerne. Det er sædvanligt at bruge HTTP-protokollen på port 80, så når du ser en URL, der slutter med port 80, kan du være sikker på, at du skal bruge HTTP for at få adgang til den. Efterhånden som teknologien udviklede sig, og personlige data begyndte at blive sendt over internettet, blev det nødvendigt at tænke over, hvordan man kunne yde yderligere beskyttelse af de oplysninger, som klienten sender til serveren. Resultatet af denne tankegang var HTTPS-protokollen.

Forskellen mellem HTTPS og HTTP

Med hensyn til syntaks er HTTPS identisk med HTTP-protokollen. Det vil sige, at den bruger de samme startlinjer og overskrifter. De eneste forskelle er yderligere kryptering og standardporten (443) . HTTPS er krypteret mellem HTTP og TCP, det vil sige mellem applikations- og transportlagene. Hvis du har glemt, hvad det betyder, så tjek artiklen om OSI-modellen . Dagens krypteringsstandard er TLS. Vi vil ikke gå for meget ind i dette emne, men husk at kryptering sker før information når transportlaget. I HTTPS er absolut al information krypteret, undtagen værten og porten, hvor anmodningen sendes. At skifte en server til at bruge HTTPS-protokollen i stedet for HTTP kræver ikke brug for at ændre serverkoden. Denne funktion er aktiveret i servlet-beholdere, som vi vil diskutere i efterfølgende artikler. Og det var alt for i dag. Vent et øjeblik. For at få fingrene i nogle HTTP-anmodninger skal du åbne Google Chrome, trykke på F12 og vælge fanen "Netværk". Alle anmodninger og svar sendt/modtaget af din browser vil blive vist her. Del 4. Det grundlæggende i Maven Del 5. Servlets og Java Servlet API. Skrivning af en simpel webapplikation Del 6. Servlet-beholdere Del 7. Introduktion til MVC (Model-View-Controller) mønsteret