L' host
intestazione indica al server web quale host virtuale utilizzare (se configurato). Puoi persino avere lo stesso host virtuale utilizzando diversi alias (= domini e domini con caratteri jolly). In questo caso, hai ancora la possibilità di leggere quell'intestazione manualmente nella tua app web se desideri fornire un comportamento diverso in base a diversi domini indirizzati. Questo è possibile perché nel tuo server web puoi (e se non sbaglio devi) impostare un vhost come host predefinito. Questo vhost predefinito viene utilizzato ogni volta che l' host
intestazione non corrisponde a nessuno degli host virtuali configurati.
Ciò significa: hai capito bene, anche se dire "più host" può essere in qualche modo fuorviante: l'host (la macchina indirizzata) è lo stesso, ciò che viene realmente risolto nell'indirizzo IP sono nomi di dominio diversi (inclusi i sottodomini) che vengono anche indicati come hostname (ma non host!).
Anche se non fa parte della domanda, un fatto divertente: questa specifica ha portato a problemi con SSL nei primi giorni perché il server Web deve fornire il certificato che corrisponde al dominio a cui il client si è rivolto. Tuttavia, per sapere quale certificato utilizzare, il server web avrebbe dovuto conoscere in anticipo il nome host indirizzato. Ma poiché il client invia queste informazioni solo sul canale crittografato (il che significa: dopo che il certificato è già stato inviato), il server ha dovuto presumere che tu abbia esplorato l'host predefinito. Ciò significava un dominio protetto da SSL per combinazione indirizzo IP / porta.
Questo problema è stato risolto con l' indicazione del nome del server ; tuttavia, ciò infrange di nuovo un po 'di privacy, poiché il nome del server viene ora trasferito di nuovo in testo normale, quindi ogni man-in-the-middle vedrebbe a quale hostname stai tentando di connetterti.
Sebbene il server web riconoscerebbe il nome host dall'indicazione del nome del server, l' host
intestazione non è obsoleta, poiché le informazioni sull'indicazione del nome del server vengono utilizzate solo all'interno dell'handshake TLS. Con una connessione non protetta, non è presente alcuna indicazione del nome del server, quindi l' host
intestazione è ancora valida (e necessaria).
Un altro fatto divertente: la maggior parte dei server web (se non tutti) rifiuta la tua richiesta http se non contiene esattamente host
un'intestazione, anche se potrebbe essere omessa perché è configurato solo il vhost predefinito. Ciò significa che le informazioni minime richieste in una richiesta http- (get-) è la prima riga contenente METHOD
RESOURCE
e PROTOCOL VERSION
e almeno l' host
intestazione, in questo modo:
GET /someresource.html HTTP/1.1
Host: www.example.com
Nella documentazione MDN sull'intestazione host in realtà lo esprimono in questo modo:
Un campo di intestazione host deve essere inviato in tutti i messaggi di richiesta HTTP / 1.1. Un codice di stato 400 (richiesta non valida) verrà inviato a qualsiasi messaggio di richiesta HTTP / 1.1 privo di un campo di intestazione host o che ne contenga più di uno.
Come accennato da Darrel Miller, le specifiche complete possono essere trovate in RFC7230 .
vhost
solo 3 occorrenze ravvicinatevirtual host
con un significato non vicino alla tua frase e 12 perdefault
lo più sulla porta,