Host
Penggunaan
Setiap permintaan HTTP/1.1 menyertakan header Host. Header ini memungkinkan virtual hosting, yaitu satu server dengan satu alamat IP menampung banyak domain. Tanpa Host, server tidak memiliki cara untuk menentukan domain mana yang dituju klien.
Nilainya berisi nama host yang diminta dan nomor port opsional yang dipisahkan oleh titik dua. Ketika tidak ada port yang ditetapkan, port bawaan untuk skema tersebut yang berlaku: port 80 untuk HTTP dan port 443 untuk HTTPS.
Server yang menerima permintaan HTTP/1.1 tanpa header Host merespons dengan 400 Bad Request. Respons yang sama berlaku ketika sebuah permintaan memuat lebih dari satu header Host, karena ambiguitas tersebut membuat server tidak dapat memilih virtual host yang benar.
Pada HTTP/2 dan HTTP/3, bidang pseudo-header :authority menggantikan Host. Klien yang mengirimkan permintaan HTTP/2 atau HTTP/3 menempatkan informasi host pada :authority sebagai gantinya. Ketika sebuah gateway mengonversi permintaan HTTP/2 menjadi HTTP/1.1, gateway tersebut membangkitkan header Host dari nilai :authority.
Header Host berbeda dari header Origin. Host mengidentifikasi server target untuk setiap permintaan. Origin mengidentifikasi sumber dari sebuah permintaan lintas origin dan hanya muncul pada konteks tertentu seperti permintaan preflight CORS dan pengiriman formulir.
host
Nama domain atau alamat IP dari server target.
port
Nomor port TCP yang bersifat opsional. Ketika dihilangkan, port bawaan untuk skema permintaan yang diasumsikan (80 untuk HTTP, 443 untuk HTTPS).
Host: <host>:<port>
Contoh
Permintaan HTTPS standar ke sebuah server web menghilangkan port karena 443 adalah nilai bawaan untuk HTTPS.
GET /articles/http-headers HTTP/1.1
Host: example.re
Ketika sebuah server berjalan pada port non-standar, nomor port disertakan setelah nama host.
GET /api/status HTTP/1.1
Host: api.example.re:8443
Permintaan ke sebuah alamat IP menyertakan alamat tersebut secara langsung. Bentuk ini umum dijumpai pada lingkungan pengembangan dan layanan internal.
GET /health HTTP/1.1
Host: 192.168.1.100:3000
Keamanan
Host header injection terjadi ketika aplikasi menggunakan nilai Host untuk membangkitkan URL (tautan reset kata sandi, URL kanonis, pengalihan) tanpa memvalidasi nilainya terlebih dahulu. Penyerang mengirimkan permintaan dengan nilai Host yang dipalsukan, sehingga aplikasi menghasilkan tautan yang mengarah ke domain yang dikendalikan penyerang.
Validasi header Host terhadap daftar putih berisi nilai-nilai yang diharapkan. Pada nginx, definisikan server_name dengan blok server catch-all bawaan yang mengembalikan 444. Pada Django, atur ALLOWED_HOSTS ke daftar domain yang diizinkan. Pada Rails, konfigurasikan host_authorization di environment aplikasi. Browser memperlakukan Host sebagai header permintaan terlarang sehingga JavaScript di sisi klien tidak dapat mengubah nilainya, tetapi permintaan antarserver dan perkakas seperti curl tidak menghadapi pembatasan semacam itu.