The host
header menceritakan webserver yang virtual host untuk menggunakan (jika diatur). Anda bahkan dapat memiliki virtual host yang sama menggunakan beberapa alias (= domain dan wildcard-domain). Dalam kasus ini, Anda masih memiliki kemungkinan untuk membaca header tersebut secara manual di aplikasi web Anda jika Anda ingin memberikan perilaku yang berbeda berdasarkan domain berbeda yang dialamatkan. Hal ini dimungkinkan karena di server web Anda, Anda dapat (dan jika saya tidak salah, Anda harus) menyiapkan satu vhost untuk menjadi host default. Vhost default ini digunakan setiap kali host
header tidak cocok dengan host virtual yang dikonfigurasi.
Artinya: Anda bisa melakukannya dengan benar, meskipun mengatakan "beberapa host" mungkin agak menyesatkan: Host (mesin yang dialamatkan) sama, yang benar-benar diselesaikan ke alamat IP adalah nama domain yang berbeda (termasuk subdomain) yang juga dirujuk sebagai nama host (tapi bukan host!).
Meskipun bukan bagian dari pertanyaan, fakta menarik: Spesifikasi ini menyebabkan masalah dengan SSL pada awalnya karena server web harus mengirimkan sertifikat yang sesuai dengan domain yang ditangani klien. Namun, untuk mengetahui sertifikat apa yang akan digunakan, server web harus mengetahui nama host yang dialamatkan sebelumnya. Tetapi karena klien mengirim informasi itu hanya melalui saluran terenkripsi (yang berarti: setelah sertifikat dikirim), server harus menganggap Anda menjelajahi host default. Itu berarti satu domain yang diamankan ssl per alamat IP / kombinasi port.
Ini telah diatasi dengan Indikasi Nama Server ; namun, hal itu sekali lagi merusak beberapa privasi, karena nama server sekarang ditransfer dalam teks biasa lagi, jadi setiap man-in-the-middle akan melihat nama host mana yang Anda coba sambungkan.
Meskipun server web akan mengetahui nama host dari Indikasi Nama Server, host
tajuknya tidak usang, karena informasi Indikasi Nama Server hanya digunakan dalam jabat tangan TLS. Dengan koneksi yang tidak aman, tidak ada Server Name Indication sama sekali, jadi host
headernya masih valid (dan perlu).
Fakta menarik lainnya: Sebagian besar server web (jika tidak semua) menolak permintaan http Anda jika tidak berisi tepat satu host
header, bahkan jika itu dapat dihilangkan karena hanya ada vhost default yang dikonfigurasi. Itu berarti informasi minimum yang diperlukan dalam permintaan http- (get-) adalah baris pertama yang berisi METHOD
RESOURCE
dan PROTOCOL VERSION
dan setidaknya host
-header, seperti ini:
GET /someresource.html HTTP/1.1
Host: www.example.com
Dalam Dokumentasi MDN tentang Host-Header, mereka benar-benar mengucapkannya seperti ini:
Bidang header Host harus dikirim di semua pesan permintaan HTTP / 1.1. Kode status 400 (Permintaan Buruk) akan dikirim ke pesan permintaan HTTP / 1.1 apa pun yang tidak memiliki bidang header Host atau berisi lebih dari satu.
Seperti yang disebutkan oleh Darrel Miller, spesifikasi lengkapnya dapat ditemukan di RFC7230 .
vhost
hanya menemukan 3 kejadian dekat yangvirtual host
artinya tidak dekat dengan frasa Anda dan 12 untukdefault
sebagian besar tentang port,