Yêu cầu HTTP trong câu hỏi thực sự không hợp lệ trừ khi trình duyệt đang nói chuyện với một trung gian (proxy).
Ví dụ của bạn sẽ trông giống một chút như sau nếu trình duyệt đang nói chuyện trực tiếp với máy chủ web:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Bây giờ, để đặt điều này trong phối cảnh, hãy xem xét mô hình OSI:
Chúng tôi có 3 hệ thống đang hoạt động:
- Một khách hàng đang chạy trình duyệt
- Một máy chủ web phục vụ trang web
- Một máy chủ DNS biết địa chỉ IP của trang web
Các giao thức liên quan là, từ dưới lên trên (tối thiểu được đặt thành OP):
Giao tiếp HTTP được thực hiện qua giao thức TCP (TCP nằm trên giao thức IP) trong khi giao tiếp DNS, trong trường hợp này, được thực hiện qua giao thức UDP (UDP cũng nằm trên giao thức IP).
Dưới đây là chuỗi liên lạc ngắn gọn:
Máy khách , đang chạy trình duyệt, yêu cầu máy chủ DNS cung cấp A
bản ghi cho www.pippo.it
, sử dụng giao thức UDP.
1.1. Trên máy khách, đó là hệ điều hành thực hiện phần giải quyết và nói chuyện lại với trình duyệt --- trình duyệt không bao giờ nói chuyện trực tiếp với máy chủ DNS, mà thông qua HĐH bằng cách gọi gethostbyname () hoặc getaddrinfo () mới hơn . Trên Windows, thứ tự mà HĐH phân giải địa chỉ có khả năng được xác định bởi một cái gì đó như thế này , trong khi trên Linux, quyền ưu tiên giải quyết được xác định bởi/etc/nsswitch.conf
Máy chủ DNS , sử dụng giao thức UDP, trả lời máy khách bằng địa chỉ bản ghi / IP, nếu nó tồn tại
Máy khách mở kết nối TCP trên cổng 80 của máy chủ web và viết văn bản sau:
Yêu cầu HTTP:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Bạn có thể bắt chước điều tương tự bằng cách làm một cái gì đó như thế này trong bảng điều khiển hoặc dấu nhắc lệnh của bạn:
> telnet www.pippo.it 80
Trying 195.128.235.49...
Connected to www.pippo.it.
Escape character is '^]'.
GET /hello.htm HTTP/1.1
Host: www.pippo.it
theo sau là hai dòng trống. Nếu nội dung được yêu cầu tồn tại, máy chủ web sẽ in nó trên màn hình. Nếu có một trình duyệt ở phía bên kia, văn bản phản hồi sẽ được trình duyệt phân tích cú pháp và tất cả các thẻ, liên kết, tập lệnh và hình ảnh được hiển thị trong những gì chúng ta gọi là trang web.
Trong thực tế có một số chi tiết khác, ví dụ các trình duyệt có thể lưu trữ địa chỉ IP nếu bạn đã truy cập một số tên miền, do đó việc phân giải DNS trở nên không cần thiết. Ngoài ra, các trình duyệt hiện đại có thể cố gắng giải quyết trước khi bạn thực sự cần nó ( tìm nạp trước DNS ) để tăng tốc trình duyệt của bạn.
Ngoài ra, máy tính của bạn có thể có các bản ghi tĩnh trong một hosts
tệp. Nếu một bản ghi khớp với yêu cầu, mục nhập tĩnh cục bộ sẽ được sử dụng trước tiên và không có máy chủ DNS nào được liên hệ. Đây là cấu hình và không nhất thiết phải đúng, nhưng nó là mặc định trên các hệ điều hành mà tôi quen thuộc.