Topik wawancara representatif

Apa yang Terjadi Saat Anda Mengetik URL ke Dalam Browser?

UmumSulit
Tim Redaksi Offer.ccDipublikasikan Diperbarui

Pertanyaan

Apa yang terjadi sejak pengguna memasukkan https://shop.example/products?id=42#reviews di bilah alamat dan menekan Enter hingga halaman menjadi terlihat?

Pertanyaan dan Cakupan

Apa yang terjadi sejak pengguna memasukkan https://shop.example/products?id=42#reviews di bilah alamat dan menekan Enter hingga halaman menjadi terlihat? Cakup parsing URL, resolusi nama, keamanan koneksi, HTTP, penanganan sisi server, navigasi browser, dan rendering. Jelaskan juga tahapan mana yang dapat dilewati oleh caching atau penggunaan kembali koneksi (connection reuse).

Mulailah dengan asumsi eksplisit agar jawabannya tidak menyimpang ke jalur yang tidak kompatibel. Ini adalah navigasi dokumen tingkat atas (top-level document) yang baru. Inputnya adalah URL lengkap, bukan kueri penelusuran. Tidak ada service worker yang menyediakan respons, tidak ada respons HTTP yang cukup segar untuk digunakan secara langsung, tidak ada koneksi kompatibel yang dapat digunakan kembali, host memerlukan resolusi, dan respons akhir server adalah HTML dengan status 200. Cache hangat (warm caches), pengalihan (redirects), dan HTTP/3 menjadi percabangan setelah baseline tersebut.

Pertanyaan fundamental lintas-lapisan ini cocok untuk wawancara backend, client, full-stack, infrastruktur, SRE, dan rekayasa perangkat lunak umum. Tugasnya adalah menurunkan jalur nyata dari asumsi cache dan protokol, kemudian memetakan tahapan jaringan, server, dan rendering ke bukti yang dapat diamati.

Apa yang Diuji oleh Pewawancara

Pertama, dapatkah kandidat menyatakan asumsi sebelum menceritakan sebuah urutan? Menghafal “DNS, TCP, TLS, HTTP, render” mengabaikan cache, service worker, penggunaan kembali koneksi, dan HTTP/3. Jalur sebenarnya bergantung pada jenis navigasi, status cache, negosiasi protokol, dan respons. Jawaban yang kuat menetapkan satu baseline deterministik dan kemudian menyebutkan kondisi yang mengubahnya.

Kedua, dapatkah kandidat menjaga batas-batas protokol tetap akurat? #reviews adalah fragmen URL dan dikecualikan dari target permintaan HTTP. HTTPS memiliki port default 443. DNS me-resolve host tetapi tidak selalu dimulai dari root server pada setiap navigasi. HTTP/1.1 dan HTTP/2 umumnya menggunakan TCP; HTTP/3 menggunakan QUIC, yang berjalan di atas UDP dan mengintegrasikan TLS 1.3.

Ketiga, dapatkah kandidat membedakan komitmen navigasi, pemuatan sumber daya, dan piksel di layar? Menerima byte pertama tidak membuat halaman langsung terlihat, dan melakukan komitmen navigasi (navigation commit) tidak berarti setiap sumber daya telah dimuat. Browser masih harus memilih renderer, mem-parsing HTML, menemukan sub-sumber daya, menyusun DOM dan CSSOM, serta melakukan kalkulasi gaya (style calculation), tata letak (layout), pengecatan (paint), dan pengomposisian (compositing).

Keempat, dapatkah kandidat menggunakan model tersebut untuk melakukan debug? Urutan saja tidak dapat menjawab “di mana letak lambatnya?” Jawaban berkualitas tinggi memetakan DNS, connect, TLS, first byte, download, dan rendering thread utama ke bukti dalam navigation timing, panel jaringan (network panel), dan trace performa.

Pertanyaan yang Perlu Diklarifikasi Terlebih Dahulu

  • Apakah inputnya pasti berupa URL? Bilah alamat dapat mengirim teks biasa ke mesin pencari. Perintah ini menyediakan URL HTTPS lengkap dengan skema, jadi lanjutkan sebagai navigasi.
  • Apakah ini navigasi dokumen atau transisi SPA di dalam aplikasi? Memanggil history.pushState() tidak secara otomatis menjalankan navigasi lintas dokumen yang sama. Baseline-nya adalah dokumen tingkat atas yang baru.
  • Apakah ini jalur dingin (cold path) atau hangat (warm path)? Cache HTTP dan DNS, service worker, preconnect, atau koneksi HTTP/2 atau HTTP/3 yang sudah ada dapat memangkas tahapan. Jelaskan jalur dingin terlebih dahulu, lalu percabangannya.
  • Protokol dan lingkungan jaringan mana yang berlaku? HTTP/1.1, HTTP/2, dan HTTP/3 membuat koneksi secara berbeda. Proksi, VPN, gateway perusahaan, atau jalur UDP yang tidak tersedia juga dapat mengubah rute.
  • Respons apa yang dikembalikan? Dokumen HTML 200, pengalihan, unduhan, kesalahan sertifikat, dan kegagalan jaringan mengambil cabang yang berbeda. Baseline menggunakan 200 HTML.
  • Apa arti "terlihat" (visible)? First paint, largest contentful paint, DOMContentLoaded, dan load adalah pencapaian (milestone) yang berbeda. Jawaban ini mencapai visibilitas pertama dan kemudian memperhitungkan pemuatan selanjutnya.

Kerangka Jawaban 30 Detik

“Saya akan berasumsi navigasi HTTPS tingkat atas yang dingin (cold). Browser mem-parsing URL dan menyimpan fragmen di sisi klien. Browser mendapatkan alamat dari cache atau DNS, lalu menggunakan kembali koneksi atau membuat TCP plus TLS untuk HTTP/1.1 atau HTTP/2, atau QUIC dengan TLS 1.3 terintegrasi untuk HTTP/3. Browser mengirimkan path dan query. Setelah memeriksa respons dan memilih renderer, browser mengomit navigasi. Renderer mem-parsing HTML, memuat sub-sumber daya, membangun DOM, CSSOM, dan render tree, lalu melakukan layout, paint, dan compositing. Untuk pemuatan yang lambat, saya memisahkan DNS, connect/TLS, TTFB, unduhan, dan waktu thread utama.”

Pembahasan Mendalam Langkah demi Langkah

Langkah 1: Klasifikasikan input bilah alamat dan parse URL

Browser pertama-tama memutuskan apakah input bilah alamat adalah URL yang dapat dinavigasi atau kueri penelusuran. Input ini berisi https://, sehingga di-parse sebagai URL. Hasilnya adalah:

KomponenNilaiTujuan
schemehttpsMemilih semantik HTTP aman dan transport yang memenuhi syarat
hostshop.exampleDigunakan untuk resolusi nama, koneksi, dan pemeriksaan identitas server
port443 (default)Disediakan oleh skema HTTPS jika dihilangkan
path/productsMengidentifikasi jalur sumber daya target
queryid=42Dikirim dalam target permintaan
fragmentreviewsTetap berada di sisi klien untuk pemosisian dokumen; dikecualikan dari target HTTP

Browser juga menerapkan aturan parsing dan normalisasi URL Standard serta memeriksa kebijakan navigasi. Penanganan unload halaman lama, kebijakan keamanan browser, atau URL yang tidak valid dapat mengubah hasil sebelum permintaan jaringan dimulai. Menekan Enter tidak sama dengan langsung mengirim paket.

Langkah 2: Tentukan apakah akses jaringan dapat dihindari

Browser yang sebenarnya mempertimbangkan status dokumen yang ada, service worker, cache HTTP, status preload, dan koneksi yang dapat digunakan kembali. Respons cache yang masih segar dan berlaku dapat menghindari kontak dengan server asal (origin). Service worker yang mengontrol dapat mengembalikan respons yang di-cache, melakukan pengambilan (fetch) sendiri, atau menggabungkan keduanya. Bahkan cache hit pun tidak menghilangkan semua kerja browser: HTML yang dikembalikan mungkin masih perlu di-parse dan di-render.

Baseline mengasumsikan tidak ada jalan pintas yang dapat menyediakan dokumen tersebut, sehingga akses jaringan dilanjutkan. Hindari mengklaim satu urutan universal seperti "periksa setiap cache, lalu lakukan DNS." Cache respons, cache DNS, dan connection pool menyimpan status yang berbeda, dan implementasi browser dapat melakukan beberapa pekerjaan secara spekulatif atau paralel.

Langkah 3: Resolve host ke alamat yang dapat dijangkau

Browser atau sistem operasi pertama-tama menggunakan hasil resolusi nama yang masih valid. Jika tidak ditemukan (miss), browser akan meminta recursive resolver yang dikonfigurasi. Resolver tersebut juga menggunakan cache dan mengikuti delegasi DNS hanya jika tidak memiliki jawaban, yang pada akhirnya mengembalikan catatan alamat yang sesuai. Hasilnya mungkin mengarah ke CDN atau edge server, bukan origin aplikasi.

Konsekuensinya, klaim bahwa "browser menanyakan root, top-level-domain, dan authoritative server pada setiap pemuatan" adalah tidak akurat. Klien biasanya mendelegasikan pekerjaan rekursif ke resolver, sementara cache dan TTL record menentukan apakah kueri lebih lanjut diperlukan. Browser juga dapat menggunakan DNS terenkripsi. Hal ini mengubah transport kueri dan batas privasi, bukan tujuan mendasar untuk memetakan host ke alamat layanan yang dapat dijangkau.

Langkah 4: Gunakan kembali atau buat koneksi aman

Dengan tersedianya alamat kandidat, browser pertama-tama mencoba menggunakan kembali koneksi yang kompatibel dengan target. Jika tidak ada yang tersedia, jalurnya bergantung pada versi HTTP yang dipilih:

  • HTTP/1.1 atau HTTP/2 umumnya membuat TCP dan kemudian melakukan TLS handshake. TLS memvalidasi sertifikat terhadap host, menegosiasikan parameter kriptografi, dan dapat menggunakan ALPN untuk memilih HTTP/2 atau HTTP/1.1.
  • HTTP/3 menggunakan QUIC. QUIC berjalan di atas UDP dan mengintegrasikan handshake TLS 1.3 ke dalam pembuatan koneksi, sehingga three-way handshake TCP tidak bersifat universal untuk HTTPS.
  • Jika jalur QUIC/UDP yang dapat digunakan tidak tersedia, klien dapat beralih (fallback) ke HTTP berbasis TCP. Kebijakan race dan fallback yang tepat adalah detail implementasi browser; jangan membuat-buat satu garis waktu yang kaku.

Perutean IP, tautan lokal, NAT, proksi, atau VPN semuanya dapat berpartisipasi dalam pengiriman paket. Dalam wawancara dengan waktu terbatas, akui lapisan-lapisan tersebut tanpa menjabarkan setiap hop jaringan kecuali pewawancara memintanya.

Langkah 5: Kirim HTTP dan tangani respons server

Setelah koneksi dapat digunakan, browser menyusun permintaan. Representasi teks HTTP/1.1 menangkap semantik penting:

http
GET /products?id=42 HTTP/1.1
Host: shop.example
Accept: text/html

Target permintaan mencakup path dan query, bukan #reviews. Browser memutuskan apakah akan melampirkan setiap cookie sesuai dengan domain, path, SameSite, keamanan, dan aturan terkait, serta dapat menambahkan kolom negosiasi konten atau validasi cache. Pernyataan bahwa "browser mengirimkan semua cookie" terlalu luas. HTTP/2 dan HTTP/3 tidak menggunakan format kabel (wire format) HTTP/1.1 ini, tetapi metode, target, field, dan semantik respons memiliki padanan langsung.

Permintaan dapat mencapai CDN, reverse proxy, atau load balancer sebelum aplikasi, cache, dan database. Server sederhana dapat merespons secara langsung. Perlakukan komponen-komponen tersebut sebagai arsitektur yang memungkinkan, bukan tahapan wajib. Respons membawa status, field, dan konten. Pengalihan (redirect) memulai navigasi berikutnya menuju lokasi baru. 304 Not Modified digabungkan dengan respons cache yang ada. Baseline menerima 200, tipe konten HTML, dan body respons.

Langkah 6: Komit navigasi browser

Saat respons tiba, browser menangani statusnya, tipe konten, keputusan unduhan, dan kebijakan keamanan, lalu memilih renderer yang sesuai untuk tujuan tersebut. Chromium membedakan antara melakukan komitmen navigasi (committing a navigation) dan memuat dokumen. Komitmen mentransfer respons ke renderer dan mengubah kepemilikan dokumen saat ini; membaca sisa data, parsing, skrip, dan sub-sumber daya dapat dilanjutkan setelahnya.

Status kesalahan tidak selalu berarti "tidak ada halaman." Respons kesalahan HTML dari server dapat menjadi dokumen baru. Kegagalan sertifikat, kegagalan koneksi, atau pemblokiran browser justru dapat menghasilkan halaman kesalahan yang dibuat oleh browser. Mengatakan bahwa navigasi hanya melakukan komitmen untuk status 200 adalah terlalu mutlak.

Langkah 7: Parse, muat, dan tampilkan piksel di layar

Renderer mem-parsing HTML secara bertahap ke dalam DOM. Ketika menemukan stylesheet, skrip, font, gambar, dan referensi lainnya, renderer menjadwalkan permintaan sub-sumber daya. Sumber daya tersebut dapat menggunakan kembali jawaban DNS dan koneksi yang ada, atau berasal dari origin lain yang memerlukan lebih banyak resolusi nama dan pekerjaan koneksi. Setiap sub-sumber daya tidak harus selalu mengulangi urutan handshake lengkap.

Parsing CSS menghasilkan CSSOM. DOM dan CSSOM berkontribusi pada render tree untuk konten yang terlihat, diikuti oleh kalkulasi gaya, tata letak, dan pengecatan; browser kemudian mengomposisikan lapisan-lapisan menjadi piksel yang ditampilkan. Skrip klasik tanpa defer, async, atau perilaku modul yang sesuai dapat memblokir parsing HTML, dan CSS memengaruhi rendering pertama. First paint dapat terjadi sebelum setiap gambar atau skrip asinkron selesai. DOMContentLoaded juga dapat mendahului penyelesaian load dari beberapa sub-sumber daya.

Fragmen #reviews tidak dikirim ke server. Setelah dokumen dapat ditargetkan, browser dapat menggulir (scroll) ke elemen yang cocok. Jika skrip membuat elemen tersebut belakangan, perilaku akhirnya juga bergantung pada kode halaman.

Langkah 8: Diagnosis masalah "lambat" dengan bukti spesifik fase

Pertama-tama tentukan apakah pengguna melihat kegagalan DNS, kegagalan koneksi, halaman kosong, konten yang terlambat muncul, atau interaksi yang terblokir. Kemudian petakan gejalanya ke dalam tahapan:

TahapBukti utamaBatasan interpretasi
DNSdomainLookupStart hingga domainLookupEndResolusi nama yang lambat tidak berarti server aplikasi lambat
ConnectconnectStart hingga connectEnd, termasuk waktu koneksi amanKoneksi baru, jalur jaringan, atau TLS mungkin mendominasi
TTFBrequestStart hingga responseStartMencakup transit permintaan, pekerjaan edge/server, dan pengembalian byte pertama
DownloadresponseStart hingga responseEndUkuran body, bandwidth, dan kongesti semuanya berpengaruh
RenderPaint, long task, dan layout dalam trace performaRendering dapat tumpang tindih dengan streaming download; pekerjaan thread utama mungkin mendominasi

Sebuah halaman dapat memeriksa catatan navigasinya untuk triase awal:

js
const [nav] = performance.getEntriesByType("navigation");

console.table({
  dns: nav.domainLookupEnd - nav.domainLookupStart,
  connect: nav.connectEnd - nav.connectStart,
  ttfb: nav.responseStart - nav.requestStart,
  download: nav.responseEnd - nav.responseStart,
  protocol: nav.nextHopProtocol,
});

Perbedaan ini merupakan titik observasi, bukan akar penyebab otomatis. Koneksi yang digunakan kembali dapat membuat beberapa penanda waktu bernilai sama. Service worker, cache, redirect, atau proksi juga dapat mengubah maknanya. Validasi hipotesis dengan panel jaringan browser, pelacakan sisi server, dan trace performa daripada langsung menyalahkan database setiap kali TTFB tinggi.

Contoh Jawaban yang Kuat

“Saya akan menetapkan baseline dingin (cold): navigasi HTTPS tingkat atas yang baru tanpa respons service worker, tanpa hit cache HTTP, atau tanpa koneksi yang dapat digunakan kembali, yang berakhir dengan respons HTML 200.

Browser mem-parsing https://shop.example/products?id=42#reviews menjadi skema HTTPS, host, port default 443, path, query, dan fragment. Fragmen tetap berada di sisi klien, sehingga target permintaan adalah /products?id=42. Browser atau OS kemudian menggunakan cache DNS atau bertanya kepada recursive resolver. Resolver juga menyimpan jawaban di cache, sehingga root, TLD, dan authoritative server tidak selalu dihubungi pada setiap navigasi.

Setelah memperoleh alamat, browser pertama-tama memeriksa koneksi yang dapat digunakan kembali. HTTP/1.1 atau HTTP/2 umumnya menggunakan TCP plus TLS dan memvalidasi sertifikat server. HTTP/3 menggunakan QUIC di atas UDP dengan TLS 1.3 yang terintegrasi ke dalam handshake QUIC, jadi saya tidak akan menyebut TCP wajib untuk setiap permintaan HTTPS. Setelah terhubung, browser mengirimkan GET dengan path dan query tetapi tanpa fragmen. CDN, load balancer, dan aplikasi dapat menanganinya, atau server dapat merespons secara langsung, mengembalikan status, field respons, dan HTML.

Browser memeriksa tipe respons dan kebijakan keamanan, memilih renderer, dan mengomit navigasi. Renderer mem-parsing HTML secara bertahap ke dalam DOM dan menemukan CSS, JavaScript, font, dan gambar. Sumber daya tersebut dapat menggunakan kembali koneksi atau cache. DOM dan CSSOM mengisi render tree, diikuti oleh layout, paint, dan compositing. Visibilitas pertama dapat terjadi sebelum semua sumber daya selesai dimuat, dan browser kemudian dapat menerapkan #reviews sebagai target di dalam dokumen.

Untuk halaman yang lambat, saya akan mengumpulkan bukti berdasarkan fase: navigation timing untuk DNS, connect, TTFB, dan download; panel jaringan untuk protokol, cache, dan redirect; serta trace performa untuk skrip, style, layout, dan paint di thread utama. Hal ini memisahkan resolusi nama, waktu jaringan dan server, serta rendering browser daripada sekadar menghafal urutan proses yang kaku.”

Kesalahan Umum

  • Menganggap satu urutan kaku berlaku untuk setiap jalur nyata → cache, service worker, dan koneksi yang digunakan kembali dapat melewati proses jaringan → nyatakan baseline dingin lalu sebutkan kondisi yang mempersingkatnya.
  • Mengklaim HTTPS selalu dimulai dengan TCP → HTTP/3 menggunakan QUIC di atas UDP dengan TLS 1.3 terintegrasi → pisahkan HTTP berbasis TCP dari HTTP berbasis QUIC.
  • Mengirim #reviews ke server → target HTTP mengecualikan fragmen → kirim /products?id=42 dan simpan fragmen di sisi klien.
  • Mengklaim browser selalu menanyakan root DNS server setiap saat → klien, recursive resolver, dan rantai delegasi semuanya dapat menggunakan cache → jelaskan rekursi dan delegasi tanpa mengarang urutan kueri yang wajib.
  • Mengulangi DNS, TCP, dan TLS untuk setiap sub-sumber daya → koneksi origin yang sama dan status cache sering kali dapat digunakan kembali → tambahkan proses hanya untuk origin baru, status usang, atau koneksi yang tidak kompatibel.
  • Mewajibkan adanya CDN, microservices, cache, dan database → topologi server bervariasi → katakan “mungkin melewati” dan jabarkan hanya untuk arsitektur yang sebenarnya.
  • Menyamakan penerimaan HTML dengan halaman yang selesai dimuat → commit, parse, first paint, DOMContentLoaded, dan load adalah pencapaian yang berbeda → definisikan titik penyelesaian yang sedang dibahas.
  • Menyebutkan protokol tanpa mendiagnosis performa → jawaban tidak menunjukkan penilaian teknis (engineering judgment) → petakan DNS, connect, TTFB, download, dan rendering ke bukti yang dapat diamati.

Pertanyaan Lanjutan

Pertanyaan Lanjutan 1: Apa yang berubah jika entri cache HTTP yang segar atau service worker tersedia?

Entri cache yang segar dapat menyediakan respons tanpa menghubungi origin. Entri yang basi (stale) mungkin memerlukan permintaan bersyarat dan respons 304. Service worker dapat mengembalikan respons cache-nya sendiri, meneruskan fetch, atau menggabungkan keduanya. Terlepas dari sumbernya, browser mungkin masih harus mengomit, mem-parsing, dan me-render dokumen. Tentukan sumber cache dan status validasi daripada mengatakan “adanya cache berarti tidak ada yang terjadi.”

Pertanyaan Lanjutan 2: Bagaimana jalur HTTP/3 berbeda dari HTTP/2?

HTTP/2 umumnya berjalan di atas TLS melalui TCP. HTTP/3 memetakan semantik HTTP ke QUIC; QUIC berjalan di atas UDP dan mengintegrasikan TLS 1.3. Keduanya mendukung aliran konkuren (concurrent streams) pada satu koneksi, tetapi hilangnya paket transport pada satu aliran HTTP/3 tidak memaksa aliran lain yang tidak terkait untuk menunggu pemulihan dari satu aliran byte TCP. Jika tidak ada jalur QUIC yang dapat digunakan, klien dapat menggunakan HTTP berbasis TCP.

Pertanyaan Lanjutan 3: Langkah mana yang berulang jika server mengembalikan status 301 ke host lain?

Browser memproses pengalihan dan Location, mem-parsing URL baru, serta menerapkan kebijakan pengalihan dan keamanan. Jika host baru tidak memiliki jawaban DNS yang dapat digunakan atau koneksi yang kompatibel, resolusi nama dan pembuatan koneksi diperlukan kembali; status yang dapat digunakan kembali dapat memangkas langkah-langkah tersebut. Browser mengirim permintaan lain hingga memperoleh respons akhir atau mencapai batas pengalihan. Di bawah semantik HTTP, Location tanpa fragmen mewarisi fragmen asli; Location dengan fragmennya sendiri menggunakan yang baru. Tidak ada fragmen yang disertakan dalam target permintaan HTTP.

Pertanyaan Lanjutan 4: DNS dan TTFB cepat, tetapi halaman tetap kosong. Apa yang Anda periksa terlebih dahulu?

Bukti jaringan telah mempersempit pencarian. Konfirmasikan bahwa HTML telah tiba dan tipe konten atau kebijakan keamanan tidak memblokir sumber daya yang diperlukan. Kemudian periksa trace performa untuk long task, skrip sinkron, stylesheet, font, dan tata letak yang berat. Sejajarkan first paint dengan waterfall sumber daya penting dan garis waktu thread utama untuk menemukan dependensi pertama yang menghambat render piksel, daripada mengoptimalkan DNS lagi.

Pertanyaan Lanjutan 5: Mengapa gambar masih bisa belum muncul setelah DOMContentLoaded?

DOMContentLoaded mencakup parsing dokumen dan skrip pemblokir yang relevan; ini tidak menunggu setiap gambar dan sub-sumber daya lainnya selesai dimuat. load lebih dekat dengan penyelesaian pemuatan dokumen dan sumber daya dependen, tetapi lazy loading, pengambilan skrip lanjutan, dan pembaruan berkelanjutan masih dapat terjadi setelahnya. Pilih milestone performa yang sesuai dengan tujuan yang terlihat oleh pengguna daripada memperlakukan satu peristiwa sebagai tanda bahwa “semuanya telah selesai.”

Sumber publik

Pertanyaan terkait