Files
learning/networking/023-http.md
2025-06-02 12:37:18 +02:00

36 lines
3.4 KiB
Markdown

# HTTP
## Introduzione
`HTTP` sta per *Hypertext Transfer Protocol* ed è il protocollo incaricato di gestire lo scambio di richieste e risposte http in un'architettura client-server. Questo protocollo è utilizzato per lo scambio di pagine web e altri contenuti multimediali. HTTP è associato alla well-known port *80*, mentre `HTTPS` (la versione sicura di HTTP) utilizza la porta *443*. Ciò significa che il processo sul server relativo a questi servizi è tipicamente legato a queste porte.
In quanto protocollo dell'application layer, HTTP si appoggia al TCP del transport layer per garantire una comunicazione affidabile e robusta. Prima che avvenga lo scambio dei veri e propri messaggi, è necessario stabilire una connessione TCP tra il client e il server.
## Tipologie di connessione HTTP
- **Connessione non persistente:** un metodo tradizionale in cui per ogni richiesta HTTP viene instaurata una sessione TCP separata. Questo approccio, essendo meno efficiente, può comportare un uso eccessivo di risorse, in particolare quando vengono richieste numerose risorse in rapida successione
- **Connessione persistente:** con questo metodo, una volta stabilita la connessione TCP tra il client e il server, tutte le risorse vengono scambiate utilizzando la stessa connessione. Solo al termine dello scambio della totalità delle risorse la connessione viene chiusa. Questo approccio è molto più efficiente, poiché riduce il sovraccarico derivante dall'instaurazione ripetuta di nuove connessioni TCP
## HTTP Request
Una richiesta HTTP è strutturata in quattro macrosezioni:
1. **Riga di richiesta**: contiene il metodo HTTP (ad esempio, GET, POST, PUT, DELETE, ecc.) e la versione di HTTP utilizzata, solitamente la versione 2
2. **Intestazione** o **Header**: ena serie di coppie chiave-valore che forniscono al server ulteriori informazioni, come ad esempio il tipo di contenuto, le informazioni sul client, le preferenze sulla codifica, e altro ancora
3. **Riga vuota**: Separa le intestazioni dal corpo della richiesta
4. **Corpo della richiesta** o **Body** (Opzionale): contiene i dati da inviare al server
![http-request](asset/img/http-request.png)
### Metodi HTTP
I metodi HTTP indicano al server l'azione da eseguire su una risorsa. I principali metodi:
- `GET`: il metodo più comune, serve per richiedere una risorsa presente sul server. Non utilizza il corpo (body) della richiesta; eventuali parametri vengono passati direttamente nell'URL, dopo il carattere `?` e separati tramite il carattere `&`. Ad esempio: `https://miosito.com/?filtro=1&rilasciato=false`
- `POST`: utilizzato per inviare dati al server, ad esempio i dati di un modulo di login. In questo caso, le informazioni vengono trasmesse tramite il corpo della richiesta
- `HEAD`: serve per richiedere informazioni (metadata) su una risorsa, senza scaricarne l'intero contenuto. Questo metodo è utile per verificare ad esempio l'esistenza della risorsa
- `PUT`: utilizzato per creare o aggiornare una risorsa sul server. Questo metodo, tuttavia, è spesso disabilitato per motivi di sicurezza
- `TRACE`: impiegato a fini diagnostici e di debugging, aiutando a identificare eventuali problemi lungo il percorso della richiesta
- `DELETE`: consente di eliminare una risorsa sul server. Anche questo metodo, per ragioni di sicurezza, è spesso disabilitato di default
- `OPTIONS`: utilizzato per verificare quali metodi HTTP sono supportati dal server, consentendo così al client di conoscere le possibili azioni disponibili