Hyper Text Transfer Protocol è un protocollo nato per la trasmissione su internet di ipertesti ma utilizzato oggi per trasferire qualsiasi tipo di file. È un protocollo standard definito inizialmente dall'RFC 1945 nella versione 1 e nell'RFC 9112 per la versione 1.1, oggi molti applicativi usano HTTP 2 definito in RFC 9113.
Il protocollo è stato inizialmente sviluppato presso il CERN di Ginevra da Tim Berners-Lee nel 1989. Attualmente W3C e IETF si occupano della coordinazione dello standard reperibile sul sito di HTTP Working Group.
Visto come è stato descritto il protocollo HTTP in quale livello dello stack TCP/IP viene utilizzato?
Accesso alla rete (o host)no, qui si trovano protocolli come quelli di Ethernet Internetno, questo è il livello che si occupa del routing Trasportono, questo è il livello che contiene TCP e UDP, si occupa del trasporto di qualsiasi tipo di dato Applicazionegiusto, server web e browser (i client) sono applicazioniLa versione 2.0 di HTTP apporta una serie di aggiornamenti riguardanti l'efficienza del sistema e anche per questo trasmette i dati in formato binario, non modifica sostanzialmente la modalità di interazione definite dalla versione 1.1 che è invece in formato testo quindi più facilmente analizzabile. In ogni caso gli strumenti a disposizione oggi permettono di analizzare sia le richieste che le risposte di entrambe le versioni. I concetti che tratteremo sono applicabili sia alla versione 1.1 che alla 2 del protocollo.
HTTP è un protocollo di comunicazione stateless che lavora al livello applicazione il cui scopo è di agire su risorse disponibili in rete.Andando in ordine la prima parola da capire è stateless: ogni coppia richiesta-risposta di HTTP fa storia a se; una successiva richiesta non va trattata tenendo conto della precedente secondo il protocollo.
HTTP permette di eseguire diverse azioni sulle risorse, non solo leggerle ma anche caricarle
o cancellarle ad esempio. Cosa è una risorsa? Per quando ci riguarda tratteremo come risorsa
qualsiasi cosa identificabile tramite una URL (come di consuetudine le cose tra parentesi quadre sono opzionali):
protocollo://host[:porta][</percorso>][?querystring][#fragment]
- protocollo
- il protocollo, potrebbe ad esempio essere http o https
- host
- il nome completo di dominio dell'host a cui ci si vuol collegare
- porta
- la porta di TCP a cui sappiamo di trovare il server in ascolto (usualmente 80 per i server http e 443 per https)
- percorso
- è il percorso della risorsa che vogliamo indicare all'interno del server
- querystring
- sono dei parametri che vengono passati al server che potrebbe usarli come
dati di input di uno script, scritti nella forma
nome=valore
e separati da & - fragment
- serve al browser per eventualmente saltare ad una parte specifica della pagina
Magari è più chiaro vedendo alcuni esempi:
# tutte le parti http://www.pluto.com:80/animali/gatto.html?tipo=persiano#coda # minimo indispensabile http://ricerca.italia.it # server in ascolto su una porta non standard e script php a cui passo nome e cognome dell'utente https://server.azienza.com:8881/script.php?nome=Mario&cognome=Rossi
Nel caso la comunicazione debba avvenire in modalità riservata (la norma oggi) il protocollo HTTP normalmente si appoggia a TLS: in questo caso il protocollo si chiama HTTPS.