2. Architecture (Architettura)
HTTP è stato progettato per essere un protocollo di comunicazione a livello applicazione senza stato, che può essere utilizzato per molti compiti oltre al suo utilizzo per l'ipertesto, come server di nomi e sistemi di gestione di oggetti distribuiti, attraverso l'estensione dei suoi metodi di richiesta, codici di errore e intestazioni.
2.1. Client/Server Messaging (Messaggistica Client/Server)
HTTP è un protocollo di richiesta/risposta senza stato. Un client invia una richiesta sotto forma di messaggio di richiesta a un server. Il server risponde con un messaggio di risposta.
La terminologia "client" e "server" si riferisce solo ai ruoli che questi programmi assumono per una particolare connessione. Lo stesso programma può agire come client su alcune connessioni e come server su altre.
2.2. Implementation Diversity (Diversità di Implementazione)
HTTP è progettato per nascondere i dettagli di implementazione dei suoi partecipanti. Pertanto, HTTP può essere utilizzato con molti diversi protocolli di trasporto di livello inferiore.
2.3. Intermediaries (Intermediari)
Gli intermediari HTTP sono componenti che si trovano tra il client e il server e agiscono come agenti di trasferimento messaggi.
Esistono tre tipi comuni di intermediari HTTP:
Proxy (Proxy)
Un proxy è un agente di trasferimento messaggi selezionato dal client, generalmente tramite configurazione locale, per ricevere richieste per determinati tipi di URI assoluti e tentare di soddisfare tali richieste tramite traduzione, se necessario.
Gateway (Gateway)
Un gateway (noto anche come proxy inverso) è un agente di trasferimento messaggi che agisce come server di origine per la richiesta in ingresso, ma traduce le richieste ricevute e le inoltra a un altro server (o server).
Tunnel (Tunnel)
Un tunnel agisce come relay tra due connessioni senza modificare i messaggi. Un tunnel cessa di esistere quando entrambe le estremità della connessione inoltrata sono chiuse.
2.4. Caches (Cache)
Una cache è un archivio locale di messaggi di risposta e il sottosistema che controlla la loro archiviazione, recupero ed eliminazione. Una cache memorizza le risposte alle richieste per ridurre il tempo di risposta e il consumo di larghezza di banda di rete per future richieste equivalenti.
2.5. Conformance and Error Handling (Conformità e Gestione degli Errori)
La parola chiave "MUST" (DEVE), o i termini "REQUIRED" (RICHIESTO) o "SHALL" (DEVE), significano che una definizione è un requisito assoluto della specifica.
La parola chiave "MUST NOT" (NON DEVE), o l'espressione "SHALL NOT" (NON DEVE), significano che una definizione è un divieto assoluto della specifica.
La parola chiave "SHOULD" (DOVREBBE), o l'aggettivo "RECOMMENDED" (RACCOMANDATO), significano che potrebbero esistere ragioni valide in circostanze particolari per ignorare un elemento particolare, ma tutte le implicazioni devono essere comprese e attentamente valutate prima di scegliere un corso diverso.
La parola chiave "SHOULD NOT" (NON DOVREBBE), o l'espressione "NOT RECOMMENDED" (NON RACCOMANDATO), significano che ragioni valide in circostanze particolari possono esistere quando il comportamento particolare è accettabile o addirittura utile.
La parola chiave "MAY" (PUÒ), o l'aggettivo "OPTIONAL" (OPZIONALE), significano che un elemento è veramente opzionale.
2.6. Protocol Versioning (Versionamento del Protocollo)
HTTP utilizza uno schema di numerazione delle versioni "<major>.<minor>" per indicare le versioni del protocollo. Questo documento definisce HTTP/1.1.
2.7. Uniform Resource Identifiers (Identificatori di Risorse Uniformi)
Gli Uniform Resource Identifiers (URI) [RFC3986] sono utilizzati in HTTP per identificare le risorse. I riferimenti URI sono utilizzati per indirizzare le richieste, indicare i reindirizzamenti e definire le relazioni.
URI-reference = <URI-reference, vedere [RFC3986], Section 4.1>
absolute-URI = <absolute-URI, vedere [RFC3986], Section 4.3>
relative-part = <relative-part, vedere [RFC3986], Section 4.2>
authority = <authority, vedere [RFC3986], Section 3.2>
uri-host = <host, vedere [RFC3986], Section 3.2.2>
port = <port, vedere [RFC3986], Section 3.2.3>
path-abempty = <path-abempty, vedere [RFC3986], Section 3.3>
segment = <segment, vedere [RFC3986], Section 3.3>
query = <query, vedere [RFC3986], Section 3.4>
2.7.1. http URI Scheme (Schema URI http)
Lo schema "http" è utilizzato per localizzare le risorse di rete tramite il protocollo HTTP.
http-URI = "http://" authority path-abempty [ "?" query ]
[ "#" fragment ]
2.7.2. https URI Scheme (Schema URI https)
Lo schema "https" è utilizzato per localizzare le risorse di rete tramite il protocollo HTTP su una connessione sicura.
https-URI = "https://" authority path-abempty [ "?" query ]
[ "#" fragment ]
2.7.3. http and https URI Normalization and Comparison (Normalizzazione e Confronto URI http e https)
Gli URI HTTP e HTTPS sono confrontati allo stesso modo di tutti gli altri URI.