Điều gì xảy ra khi bạn nhập URL và bấm Enter?

Hoang Vu,4 min read

Ngày 26 tháng 3, 2026

Hành động nhập URL rồi bấm Enter trông rất đơn giản, nhưng phía sau là một chuỗi pipeline phức tạp chạy xuyên suốt browser engine, DNS, network stack, CDN, server và rendering engine.

Bài này đi theo đúng thứ tự xảy ra trong thực tế, để bạn có góc nhìn end-to-end khi debug hiệu năng web.

Loading browser remotion demos...

1. Từ input của user đến ý định điều hướng

Khi bấm Enter ở thanh địa chỉ, trình duyệt phải xác định input là:

  1. URL hợp lệ,
  2. từ khóa tìm kiếm,
  3. hay giao thức đặc biệt (about:, file:, mailto:...).

Sau đó browser parse các thành phần:

  • scheme (https),
  • host (example.com),
  • port,
  • path,
  • query,
  • fragment.

Browser cũng normalize URL trước khi tạo navigation request.

URL TO NAVIGATION PIPELINE

1. User types URL
2. Browser parses URL
3. Check cache / service worker
4. Prepare network request
5. Navigate to new document

Các nhánh có thể trả kết quả sớm

Trước khi gọi network, browser có thể thử:

  1. back-forward cache,
  2. memory/disk HTTP cache,
  3. service worker handler.

Nếu không thỏa, request đi ra mạng.


2. DNS Resolution: từ tên miền sang IP

Trình duyệt không thể kết nối trực tiếp với example.com, mà cần IP trước.

Chuỗi tra cứu thường là:

  1. browser DNS cache,
  2. OS DNS cache,
  3. resolver cục bộ,
  4. authoritative nameserver.

DNS RESOLUTION

Browser cache
OS cache
Resolver
Authoritative DNS
IP returned

Current step: Browser cache

DNS ảnh hưởng tốc độ thế nào?

Dù chỉ vài chục mili giây, DNS vẫn là bước chặn đầu vào cho toàn bộ pipeline phía sau.

Vì vậy các kỹ thuật như dns-prefetch, cache DNS và tối ưu resolver có tác động rõ rệt ở first-load.


3. Thiết lập kết nối: TCP + TLS

Khi đã có IP, browser mở kết nối transport.

Với HTTPS:

  1. TCP 3-way handshake,
  2. TLS handshake để thương lượng mã hóa và xác thực certificate,
  3. sinh session key cho encrypted channel.

TCP + TLS HANDSHAKE

Client
TCP SYN
Server

Vì sao bước này tốn thời gian?

Handshake cần RTT qua mạng. Với mạng xa hoặc chất lượng thấp, chi phí handshake có thể chiếm phần lớn thời gian chờ trước khi tải nội dung đầu tiên.

HTTP/2, HTTP/3 và connection reuse giúp giảm chi phí này.


4. Vòng đời HTTP Request/Response

Khi kênh bảo mật đã sẵn sàng, browser gửi request kèm các header như:

  • Host,
  • Accept,
  • Accept-Language,
  • cookie,
  • If-None-Match, If-Modified-Since.

Server/CDN phản hồi status + payload.

HTTP REQUEST / RESPONSE

GET /blog/slug
200 HTML + CSS + JS

Các nhánh phản hồi phổ biến

  1. 200 OK: trả full body.
  2. 304 Not Modified: dùng lại body từ cache local.
  3. 3xx: redirect, có thể phát sinh thêm RTT.
  4. 4xx/5xx: lỗi và UI fallback.

5. Parse HTML và khám phá resource

Ngay khi nhận được HTML, parser chạy theo kiểu streaming:

  1. tokenize HTML,
  2. build DOM,
  3. phát hiện resource phụ (<link>, <script>, <img>),
  4. lên lịch tải theo mức ưu tiên.

Song song đó:

  • CSS được parse thành CSSOM,
  • script blocking có thể chặn parser,
  • async/defer có semantics khác nhau.

6. Rendering pipeline: từ DOM/CSSOM ra pixel

Rendering engine thực hiện:

  1. style calculation,
  2. layout,
  3. paint,
  4. compositing.

BROWSER RENDERING PIPELINE

Parse HTML
Build DOM
Parse CSS
Build CSSOM
Layout
Paint
Composite

Chi phí reflow/repaint

Nếu code tạo layout thrashing (đọc/ghi layout liên tục), frame time sẽ tăng và gây giật.

Thực hành tốt:

  1. giảm invalidation layout,
  2. ưu tiên animation bằng transform/opacity,
  3. hạn chế style recalculation không cần thiết.

7. JavaScript và nghẽn Main Thread

Trong phần lớn web app, JS chạy trên main thread.

Synchronous JS nặng ở giai đoạn đầu có thể trì hoãn:

  • parser,
  • input handling,
  • paint,
  • hydration của SSR app.

Đây là lý do nên theo dõi các chỉ số như INP, TBT và long tasks.


8. Các lớp cache quyết định cảm nhận tốc độ

Hiệu năng thực tế bị chi phối bởi nhiều lớp cache:

  1. DNS cache,
  2. connection reuse,
  3. HTTP cache,
  4. CDN edge cache,
  5. service worker cache.

Hai user cùng mở một URL vẫn có thể có trải nghiệm rất khác nhau vì trạng thái cache khác nhau.


9. Tóm tắt timeline end-to-end

Pipeline thực tế:

  1. parse URL + phân loại điều hướng,
  2. DNS resolution,
  3. TCP/TLS handshake,
  4. gửi request,
  5. nhận response dạng stream,
  6. build DOM/CSSOM,
  7. layout/paint/composite,
  8. JS execution + hydration,
  9. trang đạt trạng thái interactive.

Mỗi bước đều có thể đo và tối ưu độc lập.


10. Checklist tối ưu thực dụng

  1. Đặt CDN gần user.
  2. Bật HTTP/2 hoặc HTTP/3.
  3. Giữ critical CSS gọn.
  4. Dùng defer/async đúng chỗ.
  5. Giảm script bên thứ ba chặn render.
  6. Thiết lập Cache-Control, ETag đúng chiến lược.
  7. Profile long tasks và giảm JS chặn main thread.
  8. preconnect/dns-prefetch các origin quan trọng.

Kết luận

Bấm Enter không phải là một thao tác đơn lẻ. Đó là điểm bắt đầu của chuỗi cơ chế phối hợp rất chặt giữa network protocols và rendering systems.

Khi nắm rõ pipeline này, bạn sẽ debug hiệu năng production theo hướng có hệ thống, thay vì đoán mò.

2026 © @hoag/blog.