JavaRush /Java Blog /Random-IT /Parte 3. Protocolli HTTP/HTTPS

Parte 3. Protocolli HTTP/HTTPS

Pubblicato nel gruppo Random-IT
Questo materiale fa parte della serie "Introduzione allo sviluppo aziendale". Articoli precedenti: Ciao! Oggi comprenderemo i protocolli HTTP e HTTPS. Ma prima chiariamo un punto: stiamo parlando di protocolli di trasferimento dati sulla rete a livello applicativo del modello OSI. Come ricorderete, abbiamo discusso del modello OSI in uno degli articoli precedenti. E se non ricordi, eccolo qui . Parte 3. Protocolli HTTP/HTTPS - 1

Cos'è un protocollo di trasferimento dati

Questo è il nome dato all'accordo generalmente accettato, grazie al quale gli sviluppatori di diversi servizi inviano informazioni in un unico modulo. Ad esempio, utilizzando Google Chrome, puoi ottenere informazioni sia da Facebook che da Twitter, perché gli sviluppatori le trasmettono utilizzando il protocollo HTTP standard e il tuo browser può gestirle. Le regole uniformi sono molto convenienti anche per gli stessi sviluppatori lato server: ci sono molte librerie che possono convertire le informazioni per te e inviarle utilizzando il protocollo richiesto. HTTP è stato originariamente concepito come protocollo per il trasferimento di pagine HTML. Questo è stato così per molto tempo, ma ora i programmatori spesso trasferiscono su di esso sia stringhe che file multimediali. Nel complesso, questo protocollo è versatile e flessibile ed è davvero facile da usare. Ora scopriamo come farlo.

Struttura HTTP

Vale subito la pena notare che il protocollo HTTP è costituito solo da testo. Ebbene, a noi interessa soprattutto la struttura in cui si trova questo testo. Ogni messaggio è composto da tre parti:
  1. Linea iniziale: definisce i dati del servizio.
  2. Intestazioni: descrizione dei parametri del messaggio.
  3. Corpo del messaggio (Body) - dati del messaggio. Deve essere separato dalle intestazioni con una riga vuota.
Utilizzando il protocollo HTTP è possibile inviare una richiesta al server (richiesta) e ricevere una risposta dal server (risposta). Le richieste e le risposte hanno parametri leggermente diversi.

Come appare una semplice richiesta HTTP

GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
La riga di partenza contiene:
  • GET - metodo di richiesta;
  • / - percorso della richiesta (percorso);
  • HTTP/1.1 - versione del protocollo di trasferimento dati.
Poi segui i titoli:
  • Host : l'host a cui è indirizzata la richiesta;
  • User-Agent è il client che invia la richiesta.
Non è presente il corpo del messaggio. In una richiesta HTTP sono richieste solo la riga iniziale e l'intestazione Host. Ora diamo un'occhiata a tutto in ordine. Una richiesta HTTP deve contenere un metodo. Ce ne sono nove in totale: GET, POST, PUT, OPTIONS, HEAD, PATCH, DELETE, TRACE, CONNECT. I più comuni sono GET e POST. Inizialmente questi due metodi saranno sufficienti. GET : richiede contenuto dal server. Pertanto, le richieste con il metodo GET non hanno un corpo del messaggio. Ma se necessario, puoi inviare parametri tramite percorso in questo formato: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2 Qui: javarush .com – host, /send – percorso della richiesta, ? — un separatore che indica che seguono i parametri della richiesta. Alla fine, i parametri sono elencati nel formato chiave=valore, separati da una e commerciale. POST : pubblica informazioni sul server. Una richiesta POST può trasferire varie informazioni: parametri nel formato chiave=valore, JSON, codice HTML o persino file. Tutte le informazioni vengono trasmesse nel corpo del messaggio. Per esempio:
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com

{
  "Id": 12345,
  "User": "John"
}
La richiesta viene inviata a javarush.com/user/create/json, la versione del protocollo è HTTP/1.1. Accept specifica il formato di risposta che il client si aspetta di ricevere, Content-Type specifica il formato in cui viene inviato il corpo del messaggio. Content-Length: il numero di caratteri nel corpo. Una richiesta HTTP può contenere molte intestazioni diverse. Maggiori dettagli possono essere trovati nelle specifiche del protocollo .

Risposte HTTP

Dopo aver ricevuto la richiesta, il server la elabora e invia una risposta al client:
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>
La riga iniziale nella risposta contiene la versione del protocollo (HTTP/1.1), il codice di stato (200), la descrizione dello stato (OK). I titoli indicano il tipo e la lunghezza del contenuto. Il corpo della risposta contiene il codice HTML che il browser disegnerà nella pagina HTML.

Codici di stato della risposta

Tutto è chiaro con il corpo e le intestazioni del messaggio, ma vale la pena spendere qualche parola sui codici di stato. I codici di stato della risposta sono sempre tre cifre e la prima cifra del codice indica la categoria della risposta:
  • 1xx - informativo. La richiesta è stata ricevuta, il server è pronto per proseguire;
  • 2xx - riuscito. La richiesta è stata ricevuta, compresa ed elaborata;
  • 3xx - reindirizzamento. Per elaborare la richiesta è necessario eseguire i seguenti passaggi;
  • 4xx: errore del client. La richiesta contiene errori o non è conforme al protocollo;
  • 5xx: errore del server. Il server non è riuscito a elaborare la richiesta, nonostante fosse stata composta correttamente;
La seconda e la terza cifra del codice descrivono in dettaglio la risposta. Per esempio:
  • 200 OK: la richiesta è stata ricevuta ed elaborata con successo;
  • 201 Creato: la richiesta è stata ricevuta ed elaborata con successo, con conseguente creazione di una nuova risorsa o della sua istanza;
  • 301 Moved Permanently: la risorsa richiesta è stata spostata in modo permanente e le successive richieste ad essa devono avvenire al nuovo indirizzo;
  • 307 Reindirizzamento temporaneo: la risorsa è stata spostata temporaneamente. Per ora puoi accedervi utilizzando il reindirizzamento automatico;
  • 403 Vietato - la richiesta è chiara, ma è necessaria l'autorizzazione;
  • 404 Not Found: il server non ha trovato la risorsa a questo indirizzo;
  • 501 Not Implemented: il server non supporta la funzionalità per rispondere a questa richiesta;
  • 505 Versione HTTP non supportata: il server non supporta la versione specificata del protocollo HTTP.
Oltre al codice di stato della risposta, viene inviata anche una descrizione dello stato, rendendo intuitivo capire cosa significa un particolare stato. Il protocollo HTTP è molto pratico: fornisce un gran numero di intestazioni con le quali è possibile impostare una comunicazione flessibile tra il client e il server. Tutte le intestazioni di richiesta e risposta, i metodi di richiesta e i codici di stato della risposta non possono essere considerati in un unico articolo. Se necessario, puoi leggere le specifiche ufficiali del protocollo , che descrive tutte le sfumature. Il protocollo HTTP viene generalmente utilizzato sulla porta 80, quindi quando vedi un indirizzo che termina sulla porta 80, puoi essere sicuro che sarà possibile accedervi tramite HTTP. Con lo sviluppo della tecnologia e la circolazione attiva dei dati personali su Internet, abbiamo dovuto pensare a come fornire una protezione aggiuntiva alle informazioni che il cliente trasmette al server. Il risultato è stato il protocollo HTTPS.

Qual è la differenza tra HTTPS e HTTP

HTTPS è sintatticamente identico al protocollo HTTP, ovvero utilizza le stesse righe iniziali e intestazioni. Le uniche differenze sono la crittografia aggiuntiva e la porta predefinita (443) . HTTPS è crittografato tra HTTP e TCP, ovvero tra i livelli applicazione e trasporto. Se hai dimenticato di cosa si tratta, dai un'occhiata all'articolo sul modello OSI . Il moderno standard di crittografia è TLS. Non approfondiremo troppo questo argomento, ma ricordiamo che la crittografia avviene prima che le informazioni raggiungano il livello di trasporto . HTTPS crittografa assolutamente tutte le informazioni tranne l'host e la porta a cui viene inviata la richiesta. Per cambiare il server in modo che utilizzi il protocollo HTTPS anziché HTTP, non è necessario modificare il codice del server. Questa funzionalità è abilitata nei contenitori servlet, di cui parleremo nei seguenti articoli. È tutto per oggi. Tuttavia, aspetta. Per rilevare le richieste HTTP, apri Google Chrome, premi F12, seleziona la scheda Rete. Tutte le richieste e le risposte inviate/ricevute dal tuo browser verranno visualizzate qui. Parte 4. Nozioni di base su Maven Parte 5. Servlet. Scrittura di una semplice applicazione web Parte 6. Contenitori servlet Parte 7. Presentazione del pattern MVC (Model-View-Controller) Parte 8. Scrittura di una piccola applicazione spring-boot
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION