Khi nhập một URL thì điều gì xảy ra — DNS, HTTP và HTTPS

Bài viết này nằm trong khóa Kiến thức nền tảng về CNTT, xây dựng từ đầu những kiến thức CNTT thực tế tối thiểu mà bạn cần để lập trình và vibe coding.
Một URL đọc được thành bốn phần. Các sơ đồ lần theo DNS đổi tên thành số, HTTP lấy nội dung về, và HTTPS giữ cho nội dung không bị đọc trên đường đi.

Bài viết này nói về những gì xảy ra từ lúc bạn nhập URL tới lúc màn hình hiện ra.

Có ba thứ xuất hiện: DNS đổi tên thành số, HTTP trao đổi nội dung, và HTTPS giữ cho luồng truyền đó không bị đọc.

Một dòng bạn gõ được cắt thành bốn phần
http://localhost:3000/reserveĐầuhttpGiữalocalhostSố:3000Cuối/reserveGửi theoquy tắc nàoMáy tính nàoChương trình nàoTrang nào
Trên cùng là dòng bạn gõ. Hàng giữa là các phần của nó, hàng dưới là điều mỗi phần trả lời. Đủ cả bốn thì mới quyết định được gửi cái gì tới đâu.

Đủ cả ba thì mới quyết định được gửi cái gì tới đâu.

URL là chuỗi ký tự chỉ ra trang nào trên máy tính nào

Chuỗi bạn gõ theo hướng dẫn là URL (Uniform Resource Locator: chuỗi một dòng chỉ ra trang bạn muốn mở nằm trên máy tính nào và ở đâu trong máy đó).

Bên trong một dòng URL
Một dòng URL (http://localhost:3000/reserve)
Đầu — http
  • Phần này là toàn bộ những gì đứng trước "://"
  • Nếu chỗ này là https thì nội dung bạn gửi được mã hóa
Giữa — tên miền (domain name)
  • Tên đọc được cho người, đặt cho một máy tính trên Internet
  • Server công khai được đặt tên kiểu example.com
  • localhost dùng ở máy mình là tên cố định chỉ chính chiếc máy đã gõ nó
  • Yêu cầu tới máy tính nào là do chỗ này quyết định
Số — số cổng (port number)
  • Số chỉ ra yêu cầu tới chương trình nào bên trong một máy tính
  • Nhiều chương trình cùng chờ yêu cầu một lúc được, nên số này chọn ra một
  • http cố định là 80 và https là 443, nên đúng số đó thì không viết ra
Cuối — /reserve
  • Bắt đầu bằng "/", là vị trí của trang bên trong cùng một server
  • Bỏ đi thì bạn được trang cửa vào của server đó
Khung ngoài là một dòng http://localhost:3000/reserve. Từ trên xuống lần lượt là quy tắc gửi, máy tính nào, chương trình nào bên trong máy đó, và trang nào.

Chính trình duyệt là thứ cắt dòng này thành bốn phần.

Đọc URL theo bốn phần

URL là một dòng nối bốn phần lại.

Đầu là quy tắc gửi, giữa là máy tính nào, số là chương trình nào bên trong máy đó, cuối là trang nào; URL ở máy mình và URL công khai đều gồm đúng bốn phần đó, chỉ khác các ký tự bên trong.

Từ lúc nhập URL tới lúc màn hình hiện ra — DNS và HTTP

Địa chỉ IP đã xem ở bài trước chính là con số đó.

Quy tắc tra địa chỉ IP từ tên miền là DNS (Domain Name System), còn quy tắc để trình duyệt và server trao đổi request và response là HTTP (HyperText Transfer Protocol).

Máy giữ bảng tương ứng của DNS và trả lời các câu hỏi là server DNS.

Thứ trình duyệt gửi đi là request, thứ trả về là response, và từ lúc bạn nhập URL tới lúc màn hình hiện ra, trình duyệt kết nối lần lượt tới hai bên.

Trình duyệt kết nối lần lượt tới hai bên
Trình duyệt① Hỏi server DNSvề cái tênChỉ trả về con số203.0.113.5Nội dung trangkhông trả về② Kết nối tớisố đóXem /reserve rồichọn thứ trả vềNội dung trangtrả về
Từ trình duyệt bên trái tách thành hai đường trên và dưới. Đường trên là bên thứ nhất, server DNS; đường dưới là bên thứ hai, server Web; thứ trả về khác nhau.

Thứ tự là: đổi tên thành số trước, rồi mới đi lấy nội dung.

Server DNS mà bạn kết nối trước chỉ trả về một con số, chứ không trả về nội dung trang.

Giữ nội dung là server bạn tới được ở số đó, và nó xem /reserve ở cuối URL rồi mới chọn thứ trả về.

Cùng một server, /reserve và /login chọn ra nội dung khác nhau.

Response trả về chứa một con số ba chữ số và nội dung trang, còn thứ hiện lên màn hình chỉ là file nội dung.

Đổi tên thành số trước, rồi mới nhận nội dung

Trình duyệt làm bốn việc: đọc, hỏi, nhận và vẽ.

Nó cắt URL bạn gõ thành bốn phần, hỏi server DNS con số, rồi xin trang ở số đó.

Server xem phần cuối URL, chọn thứ trả về, và trả kèm một con số cho biết việc đó có trót lọt không.

HTTPS là quy tắc để nội dung không bị đọc giữa đường truyền

Với kết nối bắt đầu bằng http, các ký tự bạn gõ đi nguyên như vậy, nên thiết bị trên đường truyền đọc được nội dung.

Thứ ngăn điều đó là HTTPS (HyperText Transfer Protocol Secure), nó mã hóa (encryption: chuyển sang dạng mà ngoài bên đã định thì không ai khôi phục lại được) nội dung gửi đi rồi mới trao đổi.

Cùng những ký tự đó, http và https khác nhau ở thứ nhìn thấy được trên đường truyền
Bạn đã gõpassword123Gửi bằng httpThiết bị trên đườngđọc được nguyênServer đọc đúngký tự bạn gõGửi bằng httpsTrên đường chỉ biếttên nơi nhậnServer khôi phụclại rồi đọc
Bên trái là cùng những ký tự bạn gõ. Đường trên là http, đường dưới là https. Ký tự server đọc được ở cả hai đều như nhau, chỉ khác đoạn đường truyền ở giữa.

Ký tự server đọc được ở cả hai đều như nhau, chỉ khác ở chỗ thiết bị trên đường truyền nhìn thấy được gì.

Với https thì đường truyền vẫn biết luồng đó gửi tới server nào.

Thứ không biết được là bạn đang mở trang nào và đã gõ gì.

Trong một lần trao đổi https, đường truyền biết được gì và không biết được gì
Một lần trao đổigửi bằng httpsThiết bị trên đườngbiết được gìThiết bị trên đườngkhông đọc được gìNơi nhậnexample.comMật khẩu đã gõ,nội dung trangBạn xem site nàothì bị ghi lạiBị nhìn giữa đườngcũng không đọc được
Một lần trao đổi ở trên tách sang trái và phải. Chỉ bên trái là thiết bị trên đường truyền nhìn thấy, bên phải thì không. Hàng dưới cùng là điều xảy ra từ đó.

HTTPS còn gồm cả cơ chế xác nhận bên kia có phải chủ của tên miền đó không.

Bên cấp chứng chỉ không phải chính server mà là tổ chức phát hành chứng chỉ (CA) (certificate authority: bên thứ ba xác minh chủ của tên miền và cấp chứng chỉ).

Bên trong chứng chỉ có khóa công khai (public key: khóa đưa cho ai cũng được) dùng để xác nhận bên kia là thật.

Xác nhận là bước trước, mã hóa là bước sau.

Khóa chỉ được tạo sau khi biết chắc bên kia là chủ sở hữu, nên dù thiết bị giữa đường có chen vào thì cũng không đọc được nội dung.

https không cho đọc nội dung

Khác biệt giữa http và https chỉ là nội dung có đọc được trên đường truyền hay không.

Với http, các ký tự đi nguyên như vậy nên thiết bị trên đường truyền đọc được nội dung; với https, các ký tự được chuyển đổi trước khi gửi nên đường truyền chỉ biết được tới tên nơi nhận.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1localhost trong http://localhost:3000 của hướng dẫn chỉ máy tính nào?

Câu 2Cơ chế nào lấy một tên miền như example.com và tra ra địa chỉ IP dùng để truyền tin?

Câu 3URL bắt đầu bằng https khác URL bắt đầu bằng http ở chỗ nào?