giao thức chuẩn của mạng Internet From Wikipedia, the free encyclopedia
HTTP (tiếng Anh: HyperText Transfer Protocol - Giao thức truyền tải siêu văn bản) là một giao thức lớp ứng dụng nằm trong bộ giao thức dành cho hệ thống thông tin siêu phương tiện phân tán, cộng tác.[1] Nó chính là nền tảng dùng để trao đổi và liên lạc dữ liệu với World Wide Web, nơi mà các tập tin tài liệu siêu văn bản có thể chứa các siêu liên kết dẫn đến các tài nguyên số khác mà người dùng có thể dễ dàng truy cập được bằng cách dùng chuột nhấp vào hoặc dùng ngón tay chạm vào màn hình cảm ứng lúc duyệt web. Nhờ đó, HTTP cho phép người sử dụng truy cập và tải về các tài nguyên như văn bản HTML, text, video, ảnh... của các trang web và hiển thị chúng trên trình duyệt.
International standard |
|
---|---|
Nhà phát triển | Ban đầu là CERN; IETF, W3C |
Giới thiệu lần đầu | 1991 |
Tim Berners-Lee là người khởi xướng cho sự hình thành và phát triển của HTTP vào năm 1989 tại CERN. Nội dung ý tưởng của HTTP được tóm gọn lại trong một tài liệu cơ bản, bên trong mô tả hoạt động tương tác giữa máy khách và máy chủ ở phiên bản HTTP thử nghiệm đầu tiên, có số 0.9.[2] Phiên bản đó một thời gian sau được phát triển, trở thành phiên bản chính thức 1.0.[3]
Quá trình phát triển các RFC HTTP ban đầu là nhờ vào sự hợp tác từ phía Lực lượng Đặc nhiệm Kỹ thuật Internet (IETF) và World Wide Web Consortium (W3C), về sau thì chuyển sang do IETF phụ trách.
HTTP/1 được hoàn thiện và xuất bản tài liệu sử dụng (phiên bản 1.0) vào năm 1996. HTTP tiếp tục được phát triển vào năm 1997 (khi này là phiên bản 1.1), và đặc tính kỹ thuật của nó được cải tiến lần lượt vào các năm 1999, 2014 và 2022.
Sau này, phiên bản bảo mật hơn của HTTP là HTTPS được sử dụng rộng rãi trên hơn 80% trang web.[4] HTTP/2 là một giao thức hiệu quả hơn về ngữ nghĩa của HTTP "trên dây" và được đưa vào sử dụng vào năm 2015. Tính đến năm tháng 4 năm 2023,[cập nhật] nó được sử dụng trên 39% trang web[5] và được gần như toàn bộ trình duyệt web hỗ trợ (chiếm 97% người sử dụng).[6] Ngoài ra, nó cũng được hỗ trợ bởi các máy chủ web lớn qua Bảo mật tầng truyền tải (TLS) bằng cách sử dụng tiện ích mở rộng Application-Layer Protocol Negotiation (ALPN) [7] nhưng bắt buộc phải sử dụng TLS 1.2 hoặc mới hơn.[8][9]
HTTP/3 là phiên bản kế nhiệm của HTTP/2 được triển khai vào năm 2022,[10][11]. Nó đã được sử dụng trên 26% trang web và được nhiều trình duyệt hỗ trợ. Phiên bản này sử dụng QUIC thay vì TCP cho giao thức truyền tải cơ bản. Giống như HTTP/2, nó không gây lỗi thời các phiên bản chính trước đó của giao thức. Hỗ trợ dành cho cho HTTP/3 đã được bổ sung vào Cloudflare và Google Chrome vào tháng 9 năm 2019,[12][13] và có thể được kích hoạt trong các phiên bản ổn định của Chrome và Firefox.[14] HTTP/3 có độ trễ thấp hơn khi duyệt các trang web, tải trang nhanh hơn HTTP/2, và thậm chí còn nhanh hơn nhiều so với HTTP/1.1, trong một số trường hợp thì HTTP/3 cho tốc độ nhanh gấp ba lần so với HTTP/1.1.[15]
HTTP hoạt động dựa trên giao thức yêu cầu-phản hồi nằm trong mô hình khách - chủ. Khách có thể là một trình duyệt được một người truy cập thực hiện yêu cầu, còn chủ có thể là một máy chủ web trên đám mây hoặc lưu trữ cục bộ chạy trên một chiếc máy tính quản lý một hay nhiều trang web. Khách sẽ gửi một yêu cầu HTTP lên cho máy chủ. Còn máy chủ (nơi cung cấp các tài nguyên chẳng hạn như tập tin HTML và những nội dung, hoặc thực hiện những chức năng khác thay mặt cho khách) sẽ phản hồi lại thông điệp cho khách. Thông điệp được phản hồi sẽ chứa thông tin hoàn thành yêu cầu như thế nào, và đôi khi cũng sẽ chứa thông tin được yêu cầu trong phần nội dung của nó.
Trình duyệt web là ví dụ điển hình của user agent (UA). Các loại user agent khác có thể kể đến gồm có các công cụ tự động lập chỉ mục được sử dụng bởi các bộ máy tìm kiếm (web crawler), duyệt tìm bằng giọng nói, ứng dụng di động hoặc những phần mềm khác có thể truy cập, tải xuống và hiển thị nội dung web.
HTTP được thiết kế nhằm cải thiện các thành phần mạng trung gian cùng với cho phép liên lạc giữa máy khách và máy chủ. Các trang web có lưu lượng truy cập cao thường tận dụng những ưu điểm từ các máy chủ bộ đệm web (web caching) nhằm cung cấp nội dung thay mặt cho các máy chủ ngược dòng để cải thiện thời gian phản hồi. Trình duyệt web thường sẽ lưu giữ các tài nguyên web đã từng được truy cập trước đó vào bộ nhớ và tái sử dụng chúng bất cứ khi nào có thể để giảm lưu lượng mạng. Máy chủ proxy HTTP ở không gian mạng riêng tư có thể tạo điều kiện liên lạc cho khách mà không cần địa chỉ có thể định tuyến toàn cầu bằng cách chuyển tiếp thông điệp với máy chủ bên ngoài.
Để cho phép các nút HTTP trung gian chẳng hạn như proxy, web cache,... có thể thực hiện được chức năng thì một số tiêu đề HTTP (có trong phần yêu cầu/phản hồi HTTP) sẽ được quản lý theo từng bước (hop-by-hop), trong khi những tiêu đề khác thì được quản lý đầu cuối (tức là chỉ duy nhất một khách đầu nguồn và một máy chủ được chỉ định).
HTTP là một giao thức lớp ứng dụng được thiết kế hoạt động trong khuôn khổ bộ giao thức Internet. Ngoài ra, nó cũng còn được giả định cho là giao thức lớp vận chuyển cơ bản và đáng tin cậy. Trong phiên bản HTTP/3 mới nhất, Transmission Control Protocol (TCP) không còn được sử dụng nữa nhưng các phiên bản cũ thì vẫn còn sử dụng rất nhiều. HTTP cũng được thiết kế và điều chỉnh để sử dụng các giao thức không đáng tin cậy như User Datagram Protocol (UDP), và công nghệ mà HTTP/3 gián tiếp xây dựng dựa trên nó, ví dụ như HTTPU và Simple Service Discovery Protocol (SSDP).
Tài nguyên HTTP cùng vị trí của nó được xác định dựa trên đường dẫn URL (Uniform Resource Locator), sử dụng bộ URI http và https. Theo như định nghĩa RFC 3986, các URL sẽ được mã hoá ở dạng siêu liên kết trong các tập tin tư liệu HTML để hình thành tập tin tư liệu siêu văn bản liên kết với nhau.
Ở phiên bản HTTP/1.0, một kết nối TCP đến cùng máy chủ sẽ được thực hiện cho mỗi yêu cầu tài nguyên.[16]
Ở phiên bản HTTP/1.1, một kết nối TCP có thể được sử dụng nhiều lần để tạo ra nhiều yêu cầu tài nguyên khác (trang HTML, khung, hình ảnh, mã nguồn,...).[17] Nhờ vậy, liên lạc qua HTTP/1.1 sẽ ít gặp độ trễ hơn, vốn dĩ việc thiết lập các kết nối TCP gây ra chi phí đáng kể, đặc biệt trong điều kiện lưu lượng truy cập cao.[18]
HTTP/2 là phần cải tiến của HTTP/1.1 trước đó nhằm giữ lại mô hình khách-chủ và phương pháp giao thức giống nhau nhưng khác nhau ở chỗ:
Nhờ đó, liên lạc qua HTTP/2 sẽ giảm độ trễ đi nhiều, và nhiều lúc còn chạy nhanh hơn cả liên lạc qua HTTP/1.1.
HTTP/3 là bản tinh chỉnh của HTTP/2 nhằm sử dụng giao thức truyền tải QUIC + UDP thay cho TCP. Trước đó, phiên bản kết nối TCP/IP được sử dụng, thì giờ đây chỉ có lớp IP (được xây dựng trên UDP, như TCP) cũng cải thiện một chút tốc độ liên lạc trung bình và để tránh sự cố tắc nghẽn kết nối TCP không thường xuyên (rất hiếm) có thể tạm thời chặn đứng hoặc làm chậm luồng dữ liệu của tất cả các stream của nó (dạng khác của "head of line blocking").
Khái niệm siêu văn bản được Ted Nelson đặt ra vào năm 1965 trong dự án Xanadu lấy cảm hứng từ tầm nhìn những năm 1930 về hệ thống quản lý và truy xuất thông tin dựa trên vi phim "memex" nằm trong luận án "As We May Think" của ông vào năm 1945. Tim Berners-Lee và nhóm nghiêm cứu của ông tại CERN được ghi công phát minh HTTP nguyên thuỷ, cùng với HTML và công nghệ đi liền cho máy chủ web và giao diện người dùng máy khách được gọi là trình duyệt web. Berners-Lee thiết kế HTTP nhằm mục đích bổ trợ cho ý tưởng sáng tạo khác của ông: dự án "WorldWideWeb" lần đầu tiên công bố vào 1989 và nổi tiếng ngày nay với World Wide Web.
Máy chủ web đầu tiên được đưa vào hoạt động vào năm 1990.[20][21] Giao thức được sử dụng chỉ có một phương thức duy nhất, mang tên GET, có nghĩa là yêu cầu trích xuất dữ liệu một trang từ một máy chủ.[22] Phản hồi từ phía máy chủ luôn luôn là một trang định dạng HTML.[2]
Phiên bản | Năm ra mắt | Trạng thái hiện tại |
---|---|---|
HTTP/0.9 | 1991 | Đã lỗi thời |
HTTP/1.0 | 1996 | Đã lỗi thời |
HTTP/1.1 | 1997 | Còn thông dụng |
HTTP/2 | 2015 | Còn thông dụng |
HTTP/3 | 2022 | Còn thông dụng |
Vì HTTP/0.9 không hỗ trợ các trường Header trong một yêu cầu nên không có cơ chế nào để hỗ trợ các máy chủ ảo dựa trên tên (lựa chọn tài nguyên bằng cách kiểm tra trường Header Máy chủ). Bất kỳ máy chủ nào triển khai máy chủ ảo dựa trên tên phải tắt hỗ trợ cho HTTP/0.9. Trên thực tế, hầu hết các yêu cầu có vẻ là HTTP/0.9 đều là các yêu cầu HTTP/1.x được xây dựng kém do máy khách không mã hoá chính xác mục tiêu yêu cầu.
Session (phiên làm việc) là một khái niệm phổ biến được dùng trong lập trình web có kết nối với database. Đặc biệt các chức năng như đăng nhập, đăng xuất người dùng sẽ khó có thể thực hiện được nếu không sử dụng session. Ví dụ email, giao dịch ngân hàng,...
HTTP Request Method chỉ phương thức để được thực hiện trên nguồn được nhận diện bởi Request-URI đã cung cấp
GET
GET được sử dụng để lấy lại thông tin từ máy chủ đã cung cấp bởi sử dụng một URI đã cung cấp. Các yêu cầu sử dụng GET chỉ nhận dữ liệu và không có ảnh hưởng gì tới dữ liệu.
HEAD
Tương tự như GET, nhưng nó truyền tải dòng trạng thái và khu vực header.
POST
Một yêu cầu POST sử dụng các mẫu HTML để gửi dữ liệu tới máy chủ, như thông tin khách hàng, file tải lên,...
PUT
Thay đổi tất cả các đại diện hiện tại của nguồn mục tiêu với nội dung được tải lên.
DELETE
Gỡ bỏ tất cả các đại diện hiện tại của nguồn mục tiêu bởi URI.
CONNECT
Thiết lập một tunnel tới máy chủ được xác định bởi URI đã cung cấp.
OPTIONS
Miêu tả các chức năng giao tiếp cho nguồn mục tiêu.
TRACE
Trình bày một vòng lặp kiểm tra thông báo song song với path tới nguồn mục tiêu.
Khi nhận và phiên dịch một HTTP Request, máy chủ sẽ gửi tín hiệu phản hồi là một HTTP Response bao gồm các thành phần sau:
Một ví dụ về một HTTP Response:
HTTP/1.1 200 OK
Date: Mon, ngày 23 tháng 5 năm 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
<body>
Hello World, this is a very simple HTML document.
</body>
</html>
Dòng Status-Line: Một dòng Status Line bao gồm phiên bản giao thức (HTTP-Version) sau đó là mã hóa trạng thái số (Status-Code) và cụm từ thuần văn bản được liên kết của nó. Các thành phần được phân biệt bởi dấu cách.
Mã trạng thái HTTP được máy chủ phản hồi lại mỗi khi nhận được HTTP Resquest.
Yếu tố Status-Code là một số nguyên 3 ký tự, trong đó ký tự đầu tiên của mã hóa trạng thái định nghĩa hạng (loại) phản hồi và hai ký tự cuối không có bất cứ vai trò phân loại nào. Có 5 giá trị của ký tự đầu tiên như sau:
Nó nghĩa là yêu cầu đã được nhận và tiến trình đang tiếp tục.
Máy chủ trả về mã này để chỉ ra rằng nó đã nhận được một phần đầu tiên của một yêu cầu và được chờ đợi cho phần còn lại.
Bên yêu cầu đã yêu cầu các máy chủ để chuyển đổi và máy chủ được thừa nhận rằng nó sẽ làm như vậy
Nó nghĩa là hoạt động đã được nhận, được hiểu, và được chấp nhận một cách thành công.
Các máy chủ xử lý yêu cầu thành công
Yêu cầu đã thành công và các máy chủ tạo ra một nguồn tài nguyên mới.
Máy chủ đã chấp nhận yêu cầu, nhưng vẫn chưa xử lý nó
Máy chủ xử lý yêu cầu thành công, nhưng đang quay trở lại các thông tin mà có thể là từ một nguồn khác.
Các máy chủ xử lý yêu cầu thành công, nhưng không trả lại bất kỳ nội dung nào
Các máy chủ proccessed yêu cầu thành công, nhưng không trả lại bất kỳ nội dung. Không giống như một phản ứng 204, phản ứng này đòi hỏi người yêu cầu thiết lập lại xem tài liệu
Các máy chủ xử lý thành công một phần của một yêu cầu
Nó nghĩa là hoạt động phải được thực hiện để hoàn thành yêu cầu.
Các trang web yêu cầu đã bị di chuyển vĩnh viễn tới URL mới
Trang được yêu cầu đã di chuyển tạm thời tới một URL mới
Các trang yêu cầu đã không được sửa đổi kể từ khi yêu cầu cuối cùng. Khi máy chủ trả về phản hồi này, nó không trả lại các nội dung của trang.
Nó nghĩa là yêu cầu chứa cú pháp không chính xác hoặc không được thực hiện
Các máy chủ không hiểu được yêu cầu.
Đề nghị yêu cầu xác thực. Máy chủ có thể trả về phản hồi này yêu cầu xác thực đăng nhập tài khoản và mật khẩu (thông thường máy chủ trả về phản hồi này nếu client gửi request một trang đăng nhập)
Máy chủ từ chối yêu cầu.(thông thường nếu đăng nhập không thành công máy chủ sẽ trả về mã lỗi này)
Máy chủ không thể tìm thấy trang yêu cầu. Ví dụ, máy chủ thường trả về mã này nếu có 1 yêu cầu tới một trang không tồn tại trên máy chủ.
Phương thức được xác định trong yêu cầu là không được cho phép.
Máy chủ chỉ có thể tạo một phản hồi mà không được chấp nhận bởi Client.
Yêu cầu client phải xác thực sử dụng một proxy. Khi máy chủ trả về phản hồi này, nó cũng chỉ ra proxy mà người yêu cầu phải sử dụng.
Request tốn thời gian dài hơn thời gian máy chủ phản hồi
Các máy chủ gặp phải một cuộc xung đột thực hiện yêu cầu. Các máy chủ phải bao gồm thông tin về các cuộc xung đột trong các phản ứng. Máy chủ có thể trả về mã này để đáp ứng với yêu cầu PUT xung đột với yêu cầu trước đó, cùng với một danh sách các sự khác biệt giữa các yêu cầu.
Các máy chủ trả về phản hồi này khi các nguồn tài nguyên yêu cầu đã bị loại bỏ vĩnh viễn. Nó tương tự như một 404 (Không tìm thấy) mã, nhưng đôi khi được sử dụng ở vị trí của một 404 cho nguồn lực được sử dụng để tồn tại nhưng không còn làm. Nếu tài nguyên đã di chuyển vĩnh viễn, bạn nên sử dụng một 301 để xác định vị trí mới của tài nguyên.
Content-Length không được xác định rõ. Máy chủ sẽ không chấp nhận yêu cầu mà không có nó
Các máy chủ không đáp ứng một trong các điều kiện tiên quyết mà người yêu cầu đưa vào yêu cầu.
Máy chủ không thể xử lý yêu cầu bởi vì nó là quá lớn đối với các máy chủ để xử lý.
URI yêu cầu (thường là một URL) là quá dài đối với máy chủ để xử lý.
Máy chủ trả về mã trạng thái này nếu yêu cầu cho một phạm vi không có sẵn cho trang.
Máy chủ không thể đáp ứng yêu cầu của các trường yêu cầu, tiêu đề mong đợi.
Nó nghĩa là máy chủ thất bại với việc thực hiện một yêu cầu nhìn như có vẻ khả thi.
Các máy chủ gặp lỗi và không thể thực hiện yêu cầu.
Các máy chủ không có các chức năng để thực hiện yêu cầu. Ví dụ, máy chủ có thể trả về mã này khi nó không nhận ra phương thức yêu cầu.
Các máy chủ đã hoạt động như một gateway hoặc proxy và nhận được một phản ứng không hợp lệ từ máy chủ ngược.
Máy chủ hiện không có sẵn (vì nó bị quá tải hoặc xuống để bảo trì). Nói chung, đây là một trạng thái tạm thời.
Các máy chủ đã hoạt động như một gateway hoặc proxy và đã không nhận được yêu cầu kịp thời từ máy chủ ngược.
Các máy chủ không hỗ trợ phiên bản giao thức HTTP được sử dụng trong yêu cầu.
Sau đây là danh sách tất cả các mã trạng thái HTTP được liệt kê theo tài liệu giao thức HTTP của trang w3c
Các trường Header phản hồi cho phép Server truyền thông tin thêm về phản hồi mà không thể được đặt trong dòng Status-Line. Những trường Header này cung cấp thông tin về Server và về truy cập từ xa tới nguồn được xác định bởi Request-URI:
response-header = Accept-Ranges; | Age ; | ETag ; | Location; | Proxy-Authenticate; | Retry-After; | Server; | Vary ; | WWW-Authenticate;
Có 2 cách phổ biến mã hóa kết nối HTTP là HTTP secure (viết tắt HTTPS = HTTP + SSL) hoặc kết hợp HTTP và Transport Layer Securerity (TLS)
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.