HTTP, viết tắt của HyperText Transfer Protocol, là nền tảng cơ bản cho truyền thông dữ liệu trên World Wide Web. Được phát triển bởi Tim Berners-Lee tại CERN vào cuối những năm 1980 và đầu những năm 1990, HTTP đã trở thành giao thức truyền thông tiêu chuẩn giữa các máy chủ web và trình duyệt. Nó xác định cách thức các yêu cầu được thực hiện từ máy khách đến máy chủ và cách thức phản hồi được trả lại, cho phép truy cập và chia sẻ tài nguyên dạng hypertext như trang web và ứng dụng web.
HTTP hoạt động theo mô hình yêu cầu-phản hồi, trong đó trình duyệt (hoặc bất kỳ máy khách HTTP nào khác) gửi một yêu cầu HTTP đến máy chủ và chờ đợi phản hồi. Giao thức này không chỉ hỗ trợ trang web tĩnh mà còn cho phép tương tác động thông qua các phương thức như GET (để lấy dữ liệu) và POST (để gửi dữ liệu), cùng nhiều phương thức khác nhằm đáp ứng nhu cầu đa dạng của ứng dụng web hiện đại.
Từ khi ra đời, HTTP đã trải qua nhiều cải tiến và phát triển, từ HTTP/1.0 với các yêu cầu đơn giản, đến HTTP/2 và gần đây nhất là HTTP/3, mang lại hiệu suất cao hơn và trải nghiệm người dùng mượt mà hơn thông qua các kỹ thuật như nén header, multiplexing, và quan trọng nhất là sự hỗ trợ cho giao thức bảo mật HTTPS. Qua mỗi bước phát triển, HTTP không chỉ khẳng định vị trí không thể thiếu của mình trong việc duy trì và phát triển Internet mà còn tiếp tục thúc đẩy sự đổi mới trong công nghệ web và ứng dụng trực tuyến.
HTTP là gì?
HTTP (Hypertext Transfer Protocol) là tập hợp các quy tắc để truyền tệp – chẳng hạn như văn bản, hình ảnh, âm thanh, video và các tệp đa phương tiện khác – website. HTTP là nền tảng truyền tải dữ liệu cho world wide web.
Ngay sau khi người dùng mở web browser của họ, họ đang gián tiếp sử dụng HTTP. HTTP là một giao thức ứng dụng chạy trên bộ giao thức TCP / IP, tạo nên nền tảng của internet. Phiên bản mới nhất của HTTP là HTTP / 2, được xuất bản vào tháng 5 năm 2015. Nó là một giải pháp thay thế cho người tiền nhiệm của nó, HTTP 1.1, nhưng không làm cho nó trở nên lỗi thời.
Cách thức hoạt động của HTTP
Thông qua giao thức HTTP, tài nguyên được trao đổi giữa các thiết bị khách và máy chủ qua internet(Client – server). Các thiết bị khách gửi Request đến máy chủ về các tài nguyên cần thiết để tải một trang web; các máy chủ gửi Response trở lại máy khách để thực hiện các Request. Các Request và Response chia sẻ các tài liệu phụ – chẳng hạn như dữ liệu về hình ảnh, văn bản, bố cục văn bản, v.v. – được trình duyệt web của khách hàng ghép lại với nhau để hiển thị toàn bộ file web page.
Cơ chế hoạt động cốt lõi của HTTP dựa trên mô hình yêu cầu-phản hồi: một máy khách (thường là trình duyệt web) gửi một yêu cầu HTTP đến máy chủ, sau đó máy chủ xử lý yêu cầu và gửi lại một phản hồi. Yêu cầu và phản hồi đều bao gồm một dòng trạng thái, các header (chứa thông tin điều khiển) và tùy chọn, một thân nội dung.
HTTP xác định một tập hợp các phương thức yêu cầu, trong đó mỗi phương thức cho biết một loại hành động khác nhau mà máy khách muốn thực hiện trên máy chủ:
- GET: Yêu cầu dữ liệu từ một tài nguyên cụ thể và là phương thức được sử dụng phổ biến nhất để yêu cầu trang web.
- POST: Gửi dữ liệu đến máy chủ để tạo hoặc cập nhật một tài nguyên. Thường được sử dụng khi gửi biểu mẫu web.
- PUT: Thay thế tất cả biểu diễn hiện tại của tài nguyên mục tiêu bằng nội dung yêu cầu.
- DELETE: Xóa tài nguyên cụ thể được chỉ định.
- Và một số phương thức khác như HEAD, PATCH, OPTIONS, v.v., mỗi phương thức phục vụ cho mục đích sử dụng cụ thể.
Mỗi phản hồi từ máy chủ đều đi kèm với một mã trạng thái HTTP, cho biết kết quả của yêu cầu đã được xử lý như thế nào, chẳng hạn như 200 OK cho thành công, 404 Not Found cho tài nguyên không tìm thấy, và 500 Internal Server Error cho lỗi máy chủ, v.v.
Thông qua việc sử dụng các phương thức này và mã trạng thái, HTTP cung cấp một cách linh hoạt và mạnh mẽ để truyền tải và quản lý dữ liệu trên Internet, làm cho nó trở thành nền tảng không thể thiếu cho giao tiếp web hiện đại.
Ngoài các tệp trang web mà nó có thể phân phát, một máy chủ web còn chứa một daemon HTTP, một chương trình chờ các Request HTTP và xử lý chúng khi chúng đến. Trình duyệt web là một máy khách HTTP gửi Request đến web server. Khi người dùng trình duyệt nhập các Request tệp bằng cách “mở” tệp web bằng cách nhập URL hoặc nhấp vào liên kết siêu văn bản, trình duyệt sẽ tạo một Request HTTP và gửi Request đó đến địa chỉ Giao thức Internet (địa chỉ IP) được chỉ định bởi URL. Daemon HTTP trong máy chủ đích nhận Request và gửi lại tệp được Request hoặc các tệp được liên kết với Request.
Các thành phần của HTTP
Trong giao thức HTTP, có ba thành phần chính đóng vai trò quan trọng trong việc truyền tải và điều khiển thông tin: Headers, Body, và Status Codes.
Headers
HTTP Headers là các cặp key-value gửi trong yêu cầu và phản hồi HTTP, chứa thông tin điều khiển và metadata về yêu cầu hoặc phản hồi. Ví dụ, Content-Type
header cho biết kiểu nội dung của thân yêu cầu/phản hồi, trong khi Authorization
header thường được sử dụng để chứng thực yêu cầu đối với máy chủ. Headers giúp định cấu hình các yêu cầu, cung cấp thông tin về trình duyệt, quản lý bộ nhớ cache, và hơn thế nữa, làm cho giao tiếp HTTP linh hoạt và hiệu quả.
Body
Body trong yêu cầu và phản hồi HTTP chứa dữ liệu thực tế được gửi hoặc nhận. Trong một yêu cầu HTTP, body có thể chứa dữ liệu biểu mẫu được người dùng gửi lên máy chủ. Trong phản hồi, body thường chứa nội dung tài nguyên được yêu cầu, chẳng hạn như HTML của một trang web hoặc dữ liệu JSON từ một API. Body không luôn được yêu cầu trong mỗi yêu cầu hoặc phản hồi, tùy thuộc vào loại yêu cầu và phương thức HTTP được sử dụng.
Status Codes
HTTP Status Codes là mã số được máy chủ gửi lại trong dòng trạng thái của phản hồi để chỉ ra kết quả của yêu cầu đã được xử lý như thế nào. Các mã trạng thái này được chia thành năm loại chính:
- 1xx (Thông tin): Mã tạm thời, ví dụ,
100 Continue
. - 2xx (Thành công): Yêu cầu thành công, ví dụ,
200 OK
. - 3xx (Chuyển hướng): Yêu cầu yêu cầu hành động thêm để hoàn thành, ví dụ,
301 Moved Permanently
. - 4xx (Lỗi của Client): Lỗi xảy ra do client, ví dụ,
404 Not Found
. - 5xx (Lỗi của Server): Lỗi xảy ra do máy chủ, ví dụ,
500 Internal Server Error
.
Mỗi mã trạng thái cung cấp thông tin quan trọng về quá trình xử lý yêu cầu và giúp nhà phát triển điều chỉnh ứng dụng hoặc xử lý lỗi một cách phù hợp.
Các thành phần này tạo nên cơ sở của giao thức HTTP, cho phép giao tiếp web phức tạp và linh hoạt, đồng thời cung cấp khả năng điều khiển và thông tin phản hồi rõ ràng cho cả client và server.
Sơ đồ của máy khách, internet và máy chủ http
Các thiết bị khách sử dụng HTTP để giao tiếp với máy chủ trực tuyến và truy cập các trang web.
Để mở rộng ví dụ này, một người dùng muốn truy cập websitehcm.com.
Người dùng nhập địa chỉ web và máy tính sẽ gửi Request “GET” tới máy chủ lưu trữ địa chỉ đó.
Request GET đó được gửi bằng HTTP và cho máy chủ websitehcm biết rằng người dùng đang tìm kiếm mã HTML (Ngôn ngữ đánh dấu siêu văn bản) được sử dụng để cấu trúc và cung cấp cho trang đăng nhập giao diện.
Văn bản của trang đăng nhập đó được bao gồm trong Response HTML, nhưng các phần khác của trang – đặc biệt là hình ảnh và video của trang – được Request bởi các Request và Response HTTP riêng biệt.
Càng nhiều Request được thực hiện – ví dụ: gọi một trang có nhiều hình ảnh – máy chủ sẽ mất nhiều thời gian hơn để Response các Request đó và để hệ thống của người dùng tải trang.
Khi các cặp Request / Response này đang được gửi đi, chúng sử dụng TCP / IP để giảm và vận chuyển thông tin trong các gói nhỏ gồm các chuỗi nhị phân của văn bản. Các gói này được gửi vật lý thông qua dây điện, cáp quang và mạng không dây.
Các Request và Response mà máy chủ và máy khách sử dụng để chia sẻ dữ liệu với nhau bao gồm mã ASCII. Các Request nêu rõ thông tin mà khách hàng đang tìm kiếm từ máy chủ; câu trả lời chứa mã mà trình duyệt khách hàng sẽ dịch thành một trang web.
HTTP so với HTTPS
HTTPS là việc sử dụng Lớp cổng bảo mật (SSL) hoặc Bảo mật lớp truyền tải (TLS) làm lớp con trong lớp ứng dụng HTTP thông thường. HTTPS mã hóa và giải mã các Request trang HTTP của người dùng cũng như các trang được máy chủ web trả về. Nó cũng bảo vệ khỏi bị nghe trộm và các cuộc tấn công man-in-the-middle (MitM). HTTPS được phát triển bởi Netscape. Việc chuyển từ HTTP sang HTTPS được coi là có lợi vì nó cung cấp thêm một lớp bảo mật và tin cậy.
Request và Response HTTP
Mỗi tương tác giữa máy khách và máy chủ được gọi là một thông điệp. Thông báo HTTP là các Request hoặc Response. Các thiết bị khách gửi các Request HTTP đến các máy chủ, các máy chủ này sẽ trả lời bằng cách gửi lại các Response HTTP cho các máy khách.
Request HTTP. Đây là khi thiết bị khách, chẳng hạn như trình duyệt internet, Request máy chủ cung cấp thông tin cần thiết để tải trang web. Request cung cấp cho máy chủ thông tin mong muốn mà nó cần để điều chỉnh phản ứng của nó cho phù hợp với thiết bị khách. Mỗi Request HTTP chứa dữ liệu được mã hóa, với thông tin như:
- Version HTTP. HTTP và HTTP / 2 là hai phiên bản.
- URL. Điều này trỏ đến tài nguyên trên web.
- Method HTTP. Điều này cho biết hành động cụ thể mà Request mong đợi nhận được từ máy chủ trong Response của nó.
- Header Request HTTP. Điều này bao gồm dữ liệu như loại trình duyệt đang được sử dụng và dữ liệu mà Request đang tìm kiếm từ máy chủ. Nó cũng có thể bao gồm cookie, hiển thị thông tin được gửi trước đó từ máy chủ xử lý Request.
- HTTP body. Đây là thông tin tùy chọn mà máy chủ cần từ Request, chẳng hạn như biểu mẫu người dùng – đăng nhập tên người dùng / mật khẩu, Response ngắn và tải lên tệp – đang được gửi đến trang web.
Response HTTP. Thông báo Response HTTP là dữ liệu được thiết bị khách nhận được từ máy chủ web. Như tên gọi của nó, Response là Response của máy chủ đối với một Request HTTP. Thông tin có trong Response HTTP được điều chỉnh cho phù hợp với ngữ cảnh mà máy chủ nhận được từ Request. Các Response HTTP thường bao gồm các dữ liệu sau:
- HTTP status code, cho biết trạng thái của Request đối với thiết bị khách. Các Response có thể cho biết thành công, Response thông tin, chuyển hướng hoặc lỗi ở phía máy chủ hoặc máy khách. Xem thêm Http response code
- HTTP response headers, gửi thông tin về máy chủ và các tài nguyên được Request.
- An HTTP body (optional). Nếu Request thành công, dữ liệu này chứa dữ liệu được Request ở dạng mã HTML, được trình duyệt khách dịch sang trang web.
Proxy trong HTTP
Proxy, hoặc máy chủ proxy, là máy chủ lớp ứng dụng, máy tính hoặc các máy khác đi giữa thiết bị khách và máy chủ. Proxy chuyển tiếp các Request và Response HTTP giữa máy khách và máy chủ. Thông thường, có một hoặc nhiều proxy cho mỗi tương tác giữa máy khách-máy chủ.
Proxy có thể trong suốt hoặc không trong suốt. Các proxy minh bạch không sửa đổi Request của khách hàng mà gửi nó đến máy chủ ở dạng ban đầu. Các proxy không minh bạch sẽ sửa đổi Request của khách hàng trong một số khả năng. Các proxy không minh bạch có thể được sử dụng cho các dịch vụ bổ sung, thường là để tăng tốc độ truy xuất của máy chủ.
Các nhà phát triển web có thể sử dụng proxy cho các mục đích sau:
- Bộ nhớ đệm. Máy chủ bộ nhớ đệm có thể lưu các trang web hoặc nội dung internet khác cục bộ, để truy xuất nội dung nhanh hơn và giảm nhu cầu về băng thông của trang web.
- Xác thực. Kiểm soát đặc quyền truy cập vào các ứng dụng và thông tin trực tuyến.
- Ghi nhật ký. Lưu trữ dữ liệu lịch sử, chẳng hạn như địa chỉ IP của máy khách đã gửi Request đến máy chủ.
- Lọc web. Kiểm soát quyền truy cập vào các trang web có thể ảnh hưởng đến bảo mật hoặc bao gồm nội dung không phù hợp.
- Cân bằng tải. Các Request của khách hàng đến máy chủ có thể được xử lý bởi nhiều máy chủ, thay vì chỉ một máy chủ.
Các phiên bản http trong thực tế
HTTP, giao thức truyền tải siêu văn bản, đã phát triển qua nhiều phiên bản kể từ khi ra đời, mỗi phiên bản mang lại cải tiến về hiệu suất, bảo mật và tính năng.
HTTP/1.0
- Giới thiệu: Đây là phiên bản HTTP đầu tiên được sử dụng rộng rãi, thiết lập cơ bản cho giao tiếp web thông qua yêu cầu và phản hồi.
- Điểm khác biệt: HTTP/1.0 mỗi yêu cầu chỉ xử lý một kết nối TCP, dẫn đến việc mở và đóng kết nối liên tục, gây ra độ trễ và tăng tải cho máy chủ.
HTTP/1.1
- Cải tiến: Được giới thiệu vào năm 1997, HTTP/1.1 tập trung vào việc tối ưu hóa hiệu suất bằng cách giữ kết nối TCP mở cho nhiều yêu cầu và phản hồi, giảm độ trễ và cải thiện tốc độ truy cập trang web.
- Điểm khác biệt: Hỗ trợ kỹ thuật giữ kết nối (persistent connections), cải thiện quản lý bộ nhớ đệm, và giới thiệu khả năng đàm phán nội dung.
HTTP/2
- Cải tiến: Ra mắt năm 2015, HTTP/2 giới thiệu multiplexing, cho phép nhiều yêu cầu và phản hồi cùng lúc trên một kết nối TCP duy nhất, nén header, và ưu tiên yêu cầu, giúp tăng tốc độ tải trang đáng kể.
- Điểm khác biệt: HTTP/2 sử dụng cơ chế nhị phân để đóng gói dữ liệu, không còn dựa trên văn bản thuần túy, giúp giảm độ trễ và tăng hiệu quả truyền tải.
HTTP/3
- Cải tiến: Được phát triển từ giao thức QUIC, HTTP/3 giảm độ trễ kết nối, cải thiện hiệu suất trong điều kiện mạng kém, và tăng cường bảo mật.
- Điểm khác biệt: HTTP/3 sử dụng UDP thay vì TCP, giúp giảm độ trễ khi thiết lập kết nối và phục hồi nhanh hơn sau khi mất gói tin.
Ứng dụng và Ví dụ
Trong thực tế, sự chuyển đổi giữa các phiên bản HTTP thường được quản lý tự động bởi máy chủ web và trình duyệt, người dùng cuối ít khi cần can thiệp vào quy trình này. Ví dụ, khi truy cập một trang web qua trình duyệt, trình duyệt và máy chủ sẽ tự động thương lượng để sử dụng phiên bản HTTP tối ưu nhất mà cả hai đều hỗ trợ. Các nhà phát triển web có thể tận dụng các tính năng mới của HTTP/2 và HTTP/3 để tối ưu hóa tốc độ tải trang và trải nghiệm người dùng, đặc biệt là cho các ứng dụng web đòi hỏi hiệu suất cao và tương tác nhiều.