Itu bagian dari protokol HTTP 1.1.
Secara khusus, protokol HTTP 1.1 mencakup tajuk yang disebut "host:" yang menentukan situs web mana pada server tertentu yang berusaha diakses oleh klien.
Jadi, jika snoopy.net dan woodstock.org sama-sama membagikan 192.0.32.10 dan browser Anda mencoba untuk mendapatkan konten dari http://snoopy.net/doghouse
permintaan http spesifik akan terlihat seperti:
GET /doghouse HTTP/1.1
Host: snoopy.net
Jika url yang diinginkan adalah http://woodstock.org/seeds
permintaan akan terlihat seperti
GET /seeds HTTP/1.1
Host: woodstock.org
Dalam kedua kasus, akan ada soket tcp antara komputer Anda dan port 80 dari server. Server akan tahu untuk mendapatkan konten dari /var/www/snoopy.net atau /var/www/woodstock.org/ berdasarkan header Host.
Akan ada tajuk lain untuk kuki dan hal-hal lain seperti jenis peramban dan konten yang diizinkan, tetapi tajuk "Host" secara khusus adalah yang memungkinkan server web untuk mengetahui situs web virtual mana yang diinginkan.
Ada lagi di RFC2616 .
Ini juga mengapa situs https * harus *** memiliki alamat IP mereka sendiri - pertukaran kunci ssl dan verifikasi sertifikat dilakukan sebelum transaksi http, sehingga server http tidak akan tahu untuk memberikan sertifikat untuk "woodstock." org "atau" snoopy.net "ketika menerima koneksi https pada port 443 dari 192.0.32.10.
sunting
** di komentar Grawity menunjukkan bahwa ada ekstensi ke SSL dalam spesifikasi TLS yang memungkinkan server untuk mengetahui situs web mana yang berusaha diakses oleh pengguna, dan bahwa sebagian besar browser web modern memiliki ekstensi ini, jadi harus agak terlalu kuat.