Cách thức hoạt động của các yêu cầu HTTP

Điều gì xảy ra khi bạn nhập URL vào trình duyệt, từ đầu đến cuối

Bài viết này mô tả cách trình duyệt thực hiện các yêu cầu trang bằng giao thức HTTP / 1.1

Nếu bạn đã từng tham gia một cuộc phỏng vấn, bạn có thể đã được hỏi: “điều gì sẽ xảy ra khi bạn nhập nội dung nào đó vào hộp tìm kiếm của Google và nhấn enter”.

Đây là một trong những câu hỏi phổ biến nhất mà bạn được hỏi. Mọi người chỉ muốn xem liệu bạn có thể giải thích một số khái niệm khá cơ bản và nếu bạn có bất kỳ manh mối nào về cách thực sự hoạt động của Internet.

Trong bài đăng này, tôi sẽ phân tích điều gì sẽ xảy ra khi bạn nhập URL vào thanh địa chỉ của trình duyệt và nhấn enter.

Đó là một chủ đề rất thú vị để mổ xẻ trong một bài đăng trên blog, vì nó liên quan đến nhiều công nghệ mà tôi có thể đi sâu vào trong các bài viết riêng biệt.

Đây là công nghệ rất hiếm khi bị thay đổi và cung cấp năng lượng cho một hệ sinh thái rộng và phức tạp nhất từng được con người xây dựng.

Giao thức HTTP

Đầu tiên, tôi đề cập đến HTTPS đặc biệt vì mọi thứ khác với kết nối HTTPS.

Tôi chỉ phân tích các yêu cầu URL

Các trình duyệt hiện đại có khả năng biết thứ bạn đã viết trên thanh địa chỉ là URL thực hay cụm từ tìm kiếm và chúng sẽ sử dụng công cụ tìm kiếm mặc định nếu đó không phải là URL hợp lệ.

Tôi giả sử bạn nhập một URL thực.

Khi bạn nhập URL và nhấn enter, trình duyệt sẽ tạo URL đầy đủ trước tiên.

Nếu bạn vừa nhập một miền, nhưflaviocopes.com, theo mặc định, trình duyệt sẽ thêm vàoHTTP://đối với nó, mặc định là giao thức HTTP.

Những thứ liên quan đến macOS / Linux

Chỉ là FYI. Windows có thể làm một số việc hơi khác một chút.

Giai đoạn tra cứu DNS

Trình duyệt bắt đầuDNStra cứu để lấy địa chỉ IP máy chủ.

Tên miền là một phím tắt tiện dụng đối với con người chúng ta, nhưng internet được tổ chức theo cách mà máy tính có thể tra cứu vị trí chính xác của máy chủ thông qua địa chỉ IP của nó, đó là một tập hợp các số như222.324.3.1(IPv4).

Đầu tiên, nó kiểm tra bộ nhớ cache cục bộ DNS, để xem liệu miền đã được giải quyết gần đây chưa.

Chrome có trình hiển thị bộ nhớ cache DNS tiện dụng mà bạn có thể xem tạichrome: // net-internals / # dns

Nếu không tìm thấy gì ở đó, trình duyệt sử dụng trình phân giải DNS, sử dụnggethostbynameCuộc gọi hệ thống POSIX để lấy thông tin máy chủ.

gethostbyname

gethostbynametrước tiên, hãy xem tệp máy chủ cục bộ, tệp này trên macOS hoặc Linux nằm trong/etc/hosts, để xem liệu hệ thống có cung cấp thông tin cục bộ hay không.

Nếu điều này không cung cấp bất kỳ thông tin nào về miền, hệ thống sẽ yêu cầu máy chủ DNS.

Địa chỉ của máy chủ DNS được lưu trữ trong tùy chọn hệ thống.

Đó là 2 máy chủ DNS phổ biến:

  • 8.8.8.8: máy chủ DNS công cộng của Google
  • 1.1.1.1: máy chủ DNS CloudFlare

Hầu hết mọi người sử dụng máy chủ DNS do nhà cung cấp internet của họ cung cấp.

Trình duyệt thực hiện yêu cầu DNS bằng giao thức UDP.

TCP và UDP là hai trong số các giao thức nền tảng của mạng máy tính. Chúng có cùng cấp độ khái niệm, nhưng TCP là hướng kết nối, trong khi UDP là một giao thức không kết nối, nhẹ hơn, được sử dụng để gửi tin nhắn với chi phí thấp hơn.

Cách yêu cầu UDP được thực hiện không nằm trong phạm vi của hướng dẫn này

Máy chủ DNS có thể có IP miền trong bộ nhớ cache. Nếu không, nó sẽ hỏimáy chủ DNS gốc. Đó là một hệ thống (bao gồm 13 máy chủ thực tế, được phân phối trên khắp hành tinh) điều khiển toàn bộ internet.

Máy chủ DNS khôngkhông phảibiết địa chỉ của mỗi và mọi tên miền trên hành tinh.

Những gì nó biết là ở đâutrình phân giải DNS cấp cao nhấtChúng tôi.

Miền cấp cao nhất là phần mở rộng của miền:.com,.it,.pizzavà như thế.

Khi máy chủ DNS gốc nhận được yêu cầu, nó sẽ chuyển tiếp yêu cầu đến máy chủ DNS miền cấp cao nhất (TLD) đó.

Giả sử bạn đang tìm kiếmflaviocopes.com. Máy chủ DNS miền gốc trả về IP của máy chủ .com TLD.

Bây giờ trình phân giải DNS của chúng tôi sẽ lưu vào bộ nhớ cache IP của máy chủ TLD đó, vì vậy nó không phải hỏi lại máy chủ DNS gốc về nó.

Máy chủ DNS TLD sẽ có địa chỉ IP của Máy chủ định danh có thẩm quyền cho miền mà chúng tôi đang tìm kiếm.

Làm sao? Khi bạn mua một miền, công ty đăng ký miền sẽ gửi TDL thích hợp đến các máy chủ định danh. Khi bạn cập nhật máy chủ định danh (ví dụ: khi bạn thay đổi nhà cung cấp dịch vụ lưu trữ), công ty đăng ký tên miền của bạn sẽ tự động cập nhật thông tin này.

Đó là các máy chủ DNS của nhà cung cấp dịch vụ lưu trữ. Chúng thường nhiều hơn 1, để phục vụ như dự phòng.

Ví dụ:

  • ns1.dreamhost.com
  • ns2.dreamhost.com
  • ns3.dreamhost.com

Trình phân giải DNS bắt đầu với tên miền đầu tiên và cố gắng hỏi IP của miền (với cả miền phụ) mà bạn đang tìm kiếm.

Đó là nguồn chân lý cuối cùng của địa chỉ IP.

Bây giờ chúng ta đã có địa chỉ IP, chúng ta có thể tiếp tục cuộc hành trình của mình.

Bắt tay yêu cầu TCP

Với địa chỉ IP máy chủ có sẵn, bây giờ trình duyệt có thể bắt đầu kết nối TCP tới đó.

Kết nối TCP yêu cầu một chút bắt tay trước khi nó có thể được khởi tạo hoàn toàn và bạn có thể bắt đầu gửi dữ liệu.

Sau khi kết nối được thiết lập, chúng tôi có thể gửi yêu cầu

Gửi yêu cầu

Yêu cầu là một tài liệu văn bản thuần túy được cấu trúc theo một cách chính xác được xác định bởi giao thức truyền thông.

Nó bao gồm 3 phần:

  • dòng yêu cầu
  • tiêu đề yêu cầu
  • cơ quan yêu cầu

Dòng yêu cầu

Dòng yêu cầu đặt trên một dòng:

  • phương thức HTTP
  • vị trí tài nguyên
  • phiên bản giao thức

Thí dụ:

GET / HTTP/1.1

Tiêu đề yêu cầu

Tiêu đề yêu cầu là một tập hợp củafield: valuecác cặp thiết lập các giá trị nhất định.

Có 2 trường bắt buộc, một trong số đó làHost, và cái kia làConnection, trong khi tất cả các trường khác là tùy chọn:

Host: flaviocopes.com
Connection: close

Hostcho biết tên miền mà chúng tôi muốn nhắm mục tiêu, trong khiConnectionluôn được đặt thànhclosetrừ khi kết nối phải được giữ ở trạng thái mở.

Một số trường tiêu đề được sử dụng nhiều nhất là:

  • Origin
  • Accept
  • Accept-Encoding
  • Cookie
  • Cache-Control
  • Dnt

nhưng nhiều hơn nữa tồn tại.

Phần tiêu đề được kết thúc bằng một dòng trống.

Cơ quan yêu cầu

Phần thân yêu cầu là tùy chọn, không được sử dụng trong các yêu cầu GET nhưng được sử dụng rất nhiều trong các yêu cầu POST và đôi khi trong các động từ khác và nó có thể chứa dữ liệu trongJSONđịnh dạng.

Vì bây giờ chúng tôi đang phân tích một yêu cầu GET, phần nội dung trống và chúng tôi sẽ không xem xét thêm.

Phản hồi

Khi yêu cầu được gửi đi, máy chủ sẽ xử lý nó và gửi lại phản hồi.

Phản hồi bắt đầu bằng mã trạng thái và thông báo trạng thái. Nếu yêu cầu thành công và trả về 200, nó sẽ bắt đầu bằng:

200 OK

Yêu cầu có thể trả về mã trạng thái và thông báo khác, như một trong những thông báo sau:

404 Not Found
403 Forbidden
301 Moved Permanently
500 Internal Server Error
304 Not Modified
401 Unauthorized

Phản hồi sau đó chứa danh sách các tiêu đề HTTP và nội dung phản hồi (vì chúng tôi đang thực hiện yêu cầu trong trình duyệt, sẽ là HTML)

Phân tích cú pháp HTML

Trình duyệt hiện đã nhận được HTML và bắt đầu phân tích cú pháp và sẽ lặp lại chính xác quy trình mà chúng tôi đã làm cho tất cả các tài nguyên được trang yêu cầu:

  • Tệp CSS
  • hình ảnh
  • biểu tượng yêu thích
  • Tệp JavaScript

Cách trình duyệt hiển thị trang sau đó nằm ngoài phạm vi, nhưng điều quan trọng là phải hiểu rằng quy trình tôi đã mô tả không chỉ dành cho các trang HTML mà còn cho bất kỳ mục nào được phân phát qua HTTP.


Các hướng dẫn khác về mạng: