Dette materialet er en del av serien "Introduksjon til bedriftsutvikling". Tidligere artikler: Del 3. HTTP/HTTPS - 1Hei! I dag skal vi lære om HTTP- og HTTPS-protokollene. Men først, la oss avklare ett poeng: vi snakker om protokoller for å sende data over et nettverk på applikasjonsnivået til OSI-modellen. Du husker kanskje at vi ble kjent med OSI-modellen i en av de tidligere artiklene. Hvis du ikke husker det, er det her .

Hva er en datakommunikasjonsprotokoll?

Dette kaller vi det avtalte regelverket som lar utviklere av ulike tjenester sende informasjon i et format som andre kan forstå. Du kan for eksempel bruke Google Chrome til å hente informasjon fra både Facebook og Twitter, fordi utviklerne sender den ved hjelp av standard HTTP-protokollen, som lar nettleseren din behandle den. Ensartede regler er veldig praktiske for folk som utvikler serverdelen: det er mange biblioteker som kan konvertere informasjon for deg og sende den ved hjelp av riktig protokoll. HTTP ble opprinnelig tenkt som en protokoll for å sende HTML-sider. Det var slik det ble brukt lenge, men nå bruker programmerere det ofte til å sende både strenger og mediefiler. Generelt er denne protokollen universelt akseptert og allsidig, og den er veldig enkel å bruke. Og nå skal vi undersøke hvordan du bruker den.

Strukturen til HTTP

Vi bør merke oss med en gang at HTTP-protokollen kun består av tekst. Det som interesserer oss mest er strukturen i denne teksten. Hver melding består av tre deler:
  1. Startlinje — Dette definerer noen rengjøringsdata.
  2. Overskrifter – Disse beskriver meldingsparametrene.
  3. Brødtekst — Dette er innholdet i meldingen. Brødteksten må skilles fra overskriftene med en tom linje.
HTTP-protokollen brukes til å sende forespørsler til en server og motta svar fra serveren. Parametrene for forespørsler og svar er litt forskjellige.

Slik ser en enkel HTTP-forespørsel ut:


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 indikerer:
  • GET — forespørselens metode
  • / — Søknadens vei
  • HTTP/1.1 — Protokollversjonen
Så kommer overskriftene:
  • Vert — Verten som forespørselen er adressert til
  • User-Agent — Klienten som sender forespørselen
Meldingsteksten mangler. I en HTTP-forespørsel er det bare startlinjen og "Host"-overskriften som kreves. La oss nå se på alt ett trinn om gangen. En HTTP-forespørsel må inneholde en eller annen metode. Det er ni av dem: GET, POST, PUT, OPTIONS, HEAD, PATCH, DELETE, TRACE, CONNECT. De vanligste er GET og POST. Disse to metodene vil være nok til å begynne med. GET — Denne metoden ber om innhold fra serveren. Følgelig har ikke forespørsler med GET-metoden en meldingstekst. Men hvis du trenger det, kan du sende parametere via banen (på 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 verten, /send er forespørselens bane, og ? er et skilletegn som indikerer at spørringsparametrene følger. På slutten er nøkkel-verdi-par ("nøkkel=verdi") oppført, atskilt med et og-tegnet. POST — Denne metoden publiserer informasjon på serveren. En POST-forespørsel kan sende ulike typer informasjon: parametere som "nøkkel=verdi"-par, JSON, HTML-kode eller til og med filer. All informasjon sendes i brødteksten i meldingen. 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"
}
Forespørselen sendes til codegym.cc/user/create/json, og protokollversjonen er HTTP/1.1. "Godta" indikerer svarformatet klienten forventer å motta. "Content-Type" indikerer formatet til meldingsteksten som ble sendt i forespørselen. "Content-Length" er antall tegn i brødteksten. En HTTP-forespørsel kan inneholde mange forskjellige overskrifter. For mer informasjon, ta en titt på protokollens spesifikasjon .

HTTP-svar

Etter å ha mottatt en forespørsel, 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 inneholder protokollversjonen (HTTP/1.1), statuskode (200) og statusbeskrivelse (OK). Overskriftene inkluderer typen og lengden på innholdet. Svarteksten inneholder HTML-kode som nettleseren gjengir som en HTML-side.

Responsstatuskoder

Alt er klart angående meldingsteksten og overskriftene, men vi bør si noen ord om statuskoder. Svarstatuskoder er alltid tresifrede. Det første sifferet i koden indikerer kategorien for svaret:
  • 1xx — Informasjon. Forespørselen ble mottatt. Serveren er klar til å fortsette.
  • 2xx — Vellykket. Forespørselen ble mottatt, forstått og behandlet.
  • 3xx — Omdirigering. Ytterligere handlinger må utføres for å behandle forespørselen.
  • 4xx — Klientfeil. Forespørselen inneholder feil eller samsvarer ikke med protokollen.
  • 5xx — Serverfeil. Forespørselen ble satt sammen riktig, men serveren kunne ikke behandle den.
Det andre og tredje sifferet i koden indikerer et mer spesifikt svar. For eksempel:
  • 200 OK — Forespørselen ble mottatt og behandlet.
  • 201 Opprettet — Forespørselen ble mottatt og behandlet, noe som resulterte i opprettelsen av en ny ressurs eller forekomst.
  • 301 Flyttet permanent — Den forespurte ressursen ble flyttet permanent. Påfølgende forespørsler til den skal gjøres ved å bruke den nye adressen.
  • 307 Midlertidig omdirigering — Ressursen har blitt flyttet midlertidig. Foreløpig kan den nås ved hjelp av automatisk videresending.
  • 403 Forbudt — Forespørselen ble forstått, men autorisasjon kreves.
  • 404 Ikke funnet — Serveren fant ikke ressursen på denne adressen.
  • 501 Ikke implementert — Serveren støtter ikke funksjonaliteten som kreves for å svare på forespørselen.
  • 505 HTTP-versjon støttes ikke — Serveren støtter ikke den angitte versjonen av HTTP-protokollen.
I tillegg til svarstatuskoden sendes også en statusbeskrivelse. Dette bidrar til å avklare hva hver spesifikk status betyr. HTTP-protokollen er veldig praktisk: den gir et stort antall overskrifter, som du kan bruke til å arrangere veldig fleksibel kommunikasjon mellom en klient og server. En fullstendig vurdering av alle forespørsels- og svarhoder, forespørselsmetoder og svarstatuskoder ville være for mye for en enkelt artikkel. Hvis du trenger det, kan du lese protokollens offisielle spesifikasjon, som beskriver alle nyansene. Det er vanlig å bruke HTTP-protokollen på port 80, så når du ser en URL som slutter med port 80, kan du være trygg på at du må bruke HTTP for å få tilgang til den. Etter hvert som teknologien utviklet seg og personopplysninger begynte å bli sendt over Internett, ble det nødvendig å tenke på hvordan man kan gi ekstra beskyttelse for informasjonen som klienten sender til serveren. Resultatet av denne tenkningen var HTTPS-protokollen.

Forskjellen mellom HTTPS og HTTP

Når det gjelder syntaks, er HTTPS identisk med HTTP-protokollen. Det vil si at den bruker de samme startlinjene og overskriftene. De eneste forskjellene er ekstra kryptering og standardporten (443) . HTTPS er kryptert mellom HTTP og TCP, det vil si mellom applikasjons- og transportlagene. Hvis du har glemt hva det betyr, sjekk ut artikkelen om OSI-modellen . Dagens krypteringsstandard er TLS. Vi skal ikke gå for mye inn på dette emnet, men husk at kryptering skjer før informasjon når transportlaget. I HTTPS er absolutt all informasjon kryptert, bortsett fra verten og porten der forespørselen sendes. Å bytte en server til å bruke HTTPS-protokollen i stedet for HTTP krever ikke bruk for å endre serverkoden. Denne funksjonen er aktivert i servletbeholdere, som vi vil diskutere i påfølgende artikler. Og det var alt for i dag. Vent et øyeblikk. For å få tak i noen HTTP-forespørsler, åpne Google Chrome, trykk F12 og velg "Nettverk"-fanen. Alle forespørsler og svar som er sendt/mottatt av nettleseren din, vises her. Del 4. Det grunnleggende om Maven Del 5. Servlets og Java Servlet API. Skrive en enkel nettapplikasjon Del 6. Servlet-beholdere Del 7. Introduserer MVC-mønsteret (Model-View-Controller)