HTTP: An overview of web development

Hi guys,

Đã bao giờ bạn đối mặt với câu hỏi: Chuyện quái gì xảy ra sau khi chúng ta gõ http://google.com?

Nếu bạn từng đi phỏng vấn cho vị trí web developer, có khả năng bạn đã được hỏi câu này rồi.

Bài viết này sẽ chỉ ra cách mà HTTP làm việc, không chỉ phiên bản mới nhất mà cả HTTP/0.9, HTTP/1.0, HTTP/1.1 và HTTP/2.0, liệu chúng khác nhau như thế nào? Có 8 nội dung chính như sau:

  1. Từ viết tắt
  2. HTTP thật sự là gì?
  3. Các thành phần của HTTP
  4. Các phương thức HTTP
  5. URI và URL
  6. Định dạng truyền tin HTPP
  7. Mã trạng thái HTTP
  8. Kết luận

Từ viết tắt

Dưới đây là vài từ viết tắt mà bạn có thể sẽ gặp nhiều trong bài viết, thế nên có từ nào tự cắt nghĩa không đặng thì bạn có thể xem ở phần này nhé!!

  • API: Application Programming Interface
  • DNS: Domain Name Server
  • HTTP: Hypertext Transfer Protocol
  • IP: Internet Protocol
  • LAN: Local Area Network
  • REST: Representational State Transfer
  • RNC: Root Name Server
  • TLD: Top Level Domain
  • TLS: Top Level Server
  • WWW: World Wide Web
  • URI: Uniform Resource Identifier
  • URL: Uniform Resource Locator
  • URN: Uniform Resource Name
  • WAN: Wide-Area Network

HTTP thật sự là gì?

HTTP (Hypertext Transfer Protocol) là giao thức truyền tải siêu văn bản được sử dụng trong WWW dùng để truyền tải dữ liệu giữa Web server đến các trình duyệt Web và ngược lại. Nó được tạo ra vào đầu những năm 1990, đã được mở rộng và cập nhật nhiều lần. Bạn có thể xem sự phát triển của các phiên bản HTTP/0.9, HTTP/1.0, HTTP/1.1 và HTTP/2.0 trong bài viết này.

HTTP được thành lập bởi Tim Berners-Lee, bạn có thể cảm thấy cái tên này quen quen, vì anh ấy cũng là người sáng lập World Wide Web (WWW). Nhưng bên cạnh Tim, chúng ta không thể quên Roy Fielding, người tạo ra kiến trúc REST.

REST (Representational State Transfer) là kiểu kiến trúc phần mềm, nghĩa là, nó xác định một tập các ràng buộc được sử dụng để tạo tuân theo kiểu kiến trúc REST, một RESTful Web Services (RWS), cung cấp khả năng tương tác giữa các máy tính hệ thống trên Internet.

Chà chà… Nghe có vẻ không hiểu lắm, giải thích cách khác đi má?

Nhất trí!!

Hãy tưởng tượng rằng bạn vừa gõ từ Google vào trình duyệt của bạn và nhấn enter. Điều đầu tiên sẽ xảy ra là một quá trình tìm kiếm, trình duyệt bắt đầu tra cứu DNS, một quá trình mà bản ghi DNS được trả về từ máy chủ DNS.

Bắt đầu phức tạp rồi đấy... DNS là gì?

Khồng, không phức tạp lắm đâu. Ý tưởng chính của DNS là làm cho cuộc đời dễ sống hơn ấy chứ. Ví dụ, bạn nghĩ cái nào dễ nhớ hơn: 104.24.117.15 hay https://sambarros.com/?

Do đó, khi bạn nhập tên miền, ví dụ: www.sambarros.com, yêu cầu được gửi đến máy chủ DNS, nó sẽ trả về địa chỉ IP phù hợp (104.24.117.15). Khi một địa chỉ được tìm thấy, nó có thể sử dụng các máy tính và bộ định tuyến để tập trung vào yêu cầu và phản hồi từ phiên người dùng. Bằng cách đó, nó cung cấp cho người dùng các trang web.

Trình tra cứu DNS khá thông minh, nơi đầu tiên mà nó tìm IP là trong bộ đệm DNS của máy. Vì có thể bạn đã yêu cầu trang web này trước đây. Nếu không tìm thấy gì, nó sẽ tìm trên host file. Nếu lại không tìm thấy gì thì thử thêm một lần nữa, nó sẽ hỏi đến máy chủ DNS.

Máy chủ DNS không gì khác hơn là một máy chủ chứa cơ sở dữ liệu gồm các địa chỉ IP công khai và tên máy chủ được liên kết của chúng. Một trong những máy chủ DNS nổi tiếng nhất là Cloudflare (1.1.1.1).

Thậm chí, nếu vẫn không tìm thấy gì, nó sẽ gọi cho các vị thần và yêu cầu cơ hội cuối cùng, Root Name Servers (RNC). Chỉ có 13 (mười ba) root name servers được chỉ định, các điểm kết nối này không lưu trữ tất cả địa chỉ tồn tại, chúng thông minh hơn, chúng có địa chỉ Top-Level Server (TLS - máy chủ cấp cao) chịu trách nhiệm cho Top-Level Domain (TLD - tên miền cấp cao) như .com, .br, .de, vân vân và mây mây...

Các thành phần của HTTP

Dưới đây là cấu trúc của quy trình giao tiếp HTTP:

Như bạn có thể thấy, chúng ta ta có hai thành phần chính là client và server, nhưng giữa chúng còn có những thành phần khác là các proxy.

Để đơn giản, hãy tưởng tượng một cuộc trò chuyện giữa hai người. Mọi chuyện xảy ra khi một trong hai người bắt đầu cuộc trò chuyện. Người còn lại, nếu lịch sự, sẽ trả lời. Sau đó, người đầu tiên hỏi điều gì đó và người kia trả lời một điều khác.

Nó tương tự như cách thức hoạt động của HTTP, một máy khách tạo kết nối với máy chủ, sau đó máy khách yêu cầu một thông tin và máy chủ trả lời một cái gì đó. Trong ảnh, chúng ta có thể thấy Homer (client) đang kết nối với Marge (server) khi anh ta nói "Hey Marge". Anh ta biết rằng cuộc hội thoại đang diễn ra tốt đẹp vì anh ta nhận được câu trả lời "Hey Homer". Sau đó, anh ta yêu cầu thông tin về bữa tối: “What do we have for dinner?”, và câu trả lời là bánh mì kẹp xúc xích: “I made some hot dogs”.

Do đó, máy khách (client) là một chương trình yêu cầu dịch vụ, tài nguyên hoặc nội dung từ một chương trình khác, được gọi là máy chủ (server).

Các "cuộc hội thoại" này không gì khác chính là giao tiếp giữa các máy tính, server đáp ứng yêu cầu của client, mô hình này trở thành một trong những ý tưởng quan trọng nhất của mạng máy tính.

Máy khách thiết lập kết nối với máy chủ qua mạng cục bộ (LAN) hoặc mạng diện rộng (WAN), chẳng hạn như Internet.

Bắt đầu rõ ràng hơn rồi đấy, nhưng tôi thấy hình phía trên có các proxy, proxy là gì?

Proxy là một chương trình khác hoạt động như một máy chủ. Tuy nhiên, nó hoạt động như một máy chủ trung gian cho các yêu cầu đến từ máy khách. Đầu tiên, một máy khách kết nối với proxy. Proxy, đến lượt mình, yêu cầu một số dịch vụ cho một máy chủ khác, proxy phân tích yêu cầu, đơn giản hóa và kiểm soát độ phức tạp. Chúng được tạo ra để cấu trúc các hệ thống phân tán.

Các phương thức HTTP

Từ HTTP/1.1 đã được thêm vào lý thuyết về các phương thức. Các phương thức này có chức năng cho phép ứng dụng web hoạt động tạo, đọc, cập nhật và xóa (CRUD). Khi chúng ta có bốn hoạt động này trong REST, ta nói rằng ứng dụng đó là theo chuẩn RESTful. Với điều này, chúng ta có thể tạo ra API, một tập hợp các đường dẫn và mẫu được thiết lập và ghi lại bằng một ứng dụng, và các ứng dụng khác có thể sử dụng chức năng của ứng dụng này mà không cần phải biết chi tiết về triển khai bên trong nó.

Dưới đây là các phương thức chính:

  • GET: Sử dụng để tìm nạp tài nguyên từ máy chủ HTTP.
  • POST/PUT: Sử dụng để gửi dữ liệu đến máy chủ HTTP. Cũng có thể được sử dụng để cập nhật/tạo tài nguyên web mới trên máy chủ HTTP.
  • DELETE: Sử dụng để xóa tài nguyên hiện có trên máy chủ HTTP.
  • AHEAD: Chỉ sử dụng để tìm nạp phần tiêu đề của phản hồi HTTP (không có phần body) của một request GET truyền thống.

URI và URL

URI thì mình không chắc chứ URL khả năng cao là bạn đã nghe qua rồi nhỉ 😌

Định dạng tài nguyên thống nhất (URI, viết tắt từ Uniform Resource Identifier) là một chuỗi ký tự được sử dụng để xác định, nhận dạng một tên hoặc một tài nguyên.

URL, viết tắt của Uniform Resource Locator (Định vị Tài nguyên thống nhất), được dùng để tham chiếu tới tài nguyên trên Internet. Có thể xem URL là một thể hiện của một URI trên một máy chủ cụ thể.

Ví dụ khi bạn mở một tệp trên máy cục bộ, nó rất dễ vì bạn chỉ cần nháy đúp chuột vào tệp cần mở (một số hệ điều hành chỉ cần một nháy 😄). Tuy nhiên, để thực hiện điều này từ xa, bạn cần URLs để nói cho trình duyệt biết nơi nó cần tìm kiếm.

Chà... Tôi hiểu rồi, nhưng nó hoạt động như thế nào? Ý tôi là làm sao nó biết nên tìm kiếm ở đâu?

URL gồm 3 phần: scheme, host và path.

  • Schema: là một giao thức được sử dụng để truy cập tài nguyên.
  • Host: địa chỉ máy chủ.
  • Path: Đường dẫn đến tài nguyên bên trong máy chủ.

Ví dụ tôi có một địa chỉ như sau: https://sambarros.com/img/team/sam1.jpg

Phần đầu tiên của URL này là scheme https://; phần thứ hai là host sambarros.com và cuối cùng là path /img/team/sam1.jpg

URL được xem là địa chỉ trang web.

Định dạng truyền tin HTTP

Như chúng ta vừa tìm hiểu, giao tiếp xảy ra từ máy khách đến máy chủ và ngược lại. Nhưng làm thế nào điều này xảy ra? Câu trả lời là thông qua các thông điệp HTTP, có hai loại thông điệp HTTP: yêu cầu và phản hồi. Để giao tiếp dễ dàng, cả máy khách và máy chủ đều phải hiểu các mẫu và cách thông điệp sẽ được gửi và nhận. Thông điệp bao gồm thông tin dạng text được mã hóa trong ASCII. Dưới đây là ví dụ và cách nó hoạt động.

Định dạng HTTP Request

Định dạng HTTP Response

Mã trạng thái HTTP

Khi một máy khách gửi một yêu cầu (request) cho máy chủ, máy chủ sẽ gửi lại một đáp ứng (response) . Để thuận tiện cho việc đọc, nó sẽ được tạo mã trạng thái, mỗi mã có ý nghĩa khác nhau đối với máy khách. Các mã trạng thái được tách thành 5 loại:

  • 1xx [Thông tin]: Yêu cầu đã được nhận, quá trình tiếp tục;
  • 2xx [Thành công]: Yêu cầu đã được nhận, hiểu và chấp nhận thành công;
  • 3xx [Chuyển hướng]: Cần thực hiện thêm hành động để hoàn thành yêu cầu;
  • 4xx [Lỗi máy khách]: Yêu cầu chứa cú pháp sai hoặc không thể thực hiện được;
  • 5xx [Lỗi máy chủ]: Máy chủ không thực hiện được yêu cầu hợp lệ.

Chẳng hạn, nếu máy khách nhận được phản hồi 200, điều đó có nghĩa là mọi thứ đều ổn và kết quả là OK. Tuy nhiên, nếu một phản hồi là 400, điều đó có nghĩa là kết quả là một bad request.

Kết luận

Hướng dẫn này nhằm chỉ cho bạn cách internet hoạt động, cung cấp cho bạn lời giải thích về HTTP, URI, URL, thông điệp (message), yêu cầu (request), phản hồi (response), API request, v.v.

Hy vọng bài viết này hữu ích với bạn. Vui lòng góp ý bài viết nếu bạn có ý kiến đóng góp. Cảm ơn vì đã đọc hết bài viết này.

Nguồn: https://medium.com/swlh/http-an-overview-of-web-development-4f6033efb9da