Ketika Anda pertama kali mulai belajar bagaimana nama domain, alamat IP, server web, dan situs web semuanya cocok dan bekerja bersama, itu bisa menjadi sedikit membingungkan atau luar biasa di kali. Bagaimana semuanya bisa bekerja dengan lancar? Posting SuperUser Q & A saat ini memiliki jawaban atas pertanyaan pembaca yang ingin tahu.
Sesi Tanya & Jawab hari ini hadir untuk memberi kami hak milik SuperUser-sub divisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.
Foto milik Rosmarie Voegtli (Flickr).
Pembaca SuperUser user3407319 ingin tahu apakah server web hanya memiliki satu situs web masing-masing:
Berdasarkan apa yang saya pahami tentang DNS dan menghubungkan nama domain dengan alamat IP dari server web, sebuah situs web disimpan, apakah itu berarti setiap server web hanya dapat menampung satu situs web? Jika server web menyimpan lebih dari satu situs web, lalu bagaimana semuanya dapat diselesaikan sehingga saya dapat mengakses situs web yang saya inginkan tanpa masalah atau campur aduk?
Apakah server web hanya menampung satu situs web, atau apakah mereka memiliki lebih banyak?
Kontributor SuperUser, Bob memiliki jawabannya untuk kami:
Pada dasarnya, peramban menyertakan nama domain dalam permintaan HTTP sehingga server web mengetahui domain mana yang diminta dan dapat merespons dengan semestinya.
Permintaan HTTP
Di sini adalah bagaimana permintaan HTTP khas Anda terjadi:
1. Pengguna menyediakan URL, dalam bentuk http: // host: port / path.
2. Browser mengekstrak bagian host (domain) dari URL dan menerjemahkannya ke alamat IP (jika perlu) dalam proses yang dikenal sebagai resolusi nama. Terjemahan ini dapat terjadi melalui DNS, tetapi tidak harus (misalnya, file host lokal pada sistem operasi umum melewati DNS).
3. Browser membuka koneksi TCP ke port yang ditentukan, atau default ke port 80 pada alamat IP tersebut.
4. Peramban mengirim permintaan HTTP. Untuk HTTP / 1.1, tampilannya seperti ini:
Header host adalah standar dan diperlukan dalam HTTP / 1.1. Itu tidak ditentukan dalam spesifikasi HTTP / 1.0, tetapi beberapa server mendukungnya.
Dari sini, server web memiliki beberapa informasi yang dapat digunakan untuk memutuskan respons apa yang seharusnya. Perhatikan bahwa adalah mungkin untuk server web tunggal untuk terikat ke beberapa alamat IP.
- Alamat IP yang diminta, dari soket TCP (alamat IP klien juga tersedia, tetapi ini jarang digunakan, dan terkadang untuk memblokir / memfilter)
- Port yang diminta, dari soket TCP
- Nama host yang diminta, sebagaimana ditentukan dalam header host oleh browser dalam permintaan HTTP
- Jalur yang diminta
- Header lainnya (cookie, dll.)
Seperti yang Anda perhatikan, pengaturan hosting bersama yang paling umum saat ini menempatkan banyak situs web pada satu alamat IP: kombinasi port, hanya menyisakan host untuk membedakan antara situs web.
Ini dikenal sebagai Host Virtual Berbasis Nama di Apache-land, sementara Nginx memanggil mereka Nama Server di Blok Server, dan IIS lebih suka Virtual Server.
Apa Tentang HTTPS?
HTTPS sedikit berbeda. Semuanya identik hingga pembentukan koneksi TCP, tetapi setelah itu terowongan TLS terenkripsi harus ditetapkan. Tujuannya adalah untuk tidak membocorkan informasi apa pun tentang permintaan tersebut.
Untuk memverifikasi bahwa server web benar-benar memiliki domain ini, server web harus mengirim sertifikat yang ditandatangani oleh pihak ketiga tepercaya. Browser kemudian akan membandingkan sertifikat ini dengan domain yang diminta.
Ini menghadirkan masalah. Bagaimana server web mengetahui sertifikat host / situs web mana yang harus dikirim jika perlu melakukan ini sebelum permintaan HTTP diterima?
Secara tradisional, ini diselesaikan dengan memiliki alamat IP khusus (atau port) untuk setiap situs web yang membutuhkan HTTPS. Jelas, ini telah menjadi masalah karena kami kehabisan alamat IPv4.
Masukkan SNI (Indikasi Nama Server). Browser sekarang melewati nama host selama negosiasi TLS, sehingga server web memiliki informasi ini cukup awal untuk mengirim sertifikat yang benar. Di sisi server web, konfigurasi sangat mirip dengan konfigurasi virtual host HTTP.
Kelemahannya adalah nama host sekarang dilewatkan sebagai teks biasa sebelum enkripsi, dan pada dasarnya adalah informasi yang dibocorkan. Ini biasanya dianggap sebagai trade-off yang dapat diterima meskipun mengingat nama host biasanya diekspos dalam permintaan DNS.
Bagaimana Jika Anda Meminta Situs Web Hanya dengan Alamat IP?
Apa yang dilakukan oleh server web ketika tidak tahu host khusus mana yang Anda minta bergantung pada implementasi dan konfigurasi server web. Biasanya, ada situs "default", "catch-all", atau "fall back" yang ditentukan yang akan memberikan tanggapan ke semua permintaan yang tidak secara eksplisit menentukan host.
Situs web default ini dapat menjadi situs web independennya sendiri (sering menampilkan pesan kesalahan), atau bisa juga situs web lain di server web bergantung pada preferensi admin web server.
Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.