Hypertext Transfer Protocol

giao thức chuẩn của mạng Internet

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 cho các hệ thống thông tin siêu phương tiện phân tán, cộng tác.[1] HTTP là nền tảng của truyền thông dữ liệu cho World Wide Web, nơi siêu văn bản tài liệu bao gồm các siêu liên kết đến các tài nguyên khác mà người dùng có thể dễ dàng truy cập, ví dụ bằng một con chuột nhấp chuột hoặc bằng cách chạm vào màn hình trong một trình duyệt web.

Sự phát triển của HTTP được Tim Berners-Lee tại CERN khởi xướng vào năm 1989. Việc phát triển các RFC HTTP ban đầu là một nỗ lực phối hợp của Lực lượng Đặc nhiệm Kỹ thuật Internet (IETF) và World Wide Web Consortium (W3C), với các thay đổi sau đó chuyển sang do IETF phụ trách.

HTTP/1.1 lần đầu tiên được chuẩn hóa trong RFC 2068 vào năm 1997. Đặc điểm kỹ thuật đó đã được RFC 2616 tuân theo vào năm 1999, cũng được thay thế bằng họ RFC 7230 vào năm 2014.

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 xuất bản vào năm 2015; nó hiện được hỗ trợ bởi hầu như tất cả các trình duyệt web [2] và 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) [3] trong đó TLS 1.2 hoặc mới hơn là bắt buộc phải có.[4][5]

HTTP/3 là sự kế thừa được đề xuất cho HTTP/2,[6][7] đã được sử dụng trên web (được bật theo mặc định trong macOS mới nhất), sử dụng UDP thay vì TCP cho giao thức truyền tải cơ bản. Giống như HTTP/2, nó không lỗi thời các phiên bản chính trước đó của giao thức. Hỗ trợ cho HTTP/3 đã được thêm vào CloudflareGoogle Chrome vào tháng 9 năm 2019,[8][9] và có thể được kích hoạt trong các phiên bản ổn định của ChromeFirefox.[10]

Lịch sửSửa đổi

HTTP cùng với HTML là phát kiến của Tim Berners-Lee ở CERN vào năm 1989 đứng sau là các tổ chức lớn Lực lượng Đặc nhiệm Kỹ thuật Internet (IETF) và World Wide Web Consortium (W3C), và đỉnh cao là việc công bố ra hàng loạt các bản RFC (Request for Comments).

Phiên bản đầu tiên của HTTP là HTTP V0.9 (1991). Năm 1995, David Ragger lãnh đạo nhóm HTTP Working Group (viết tắt HTTP WG) muốn mở rộng giao thức này đa dạng hơn như: thẻ meta-rich decription, và bảo mật hơn bằng cách thêm các phương thức khác và các trường header.[11]

HTTP lúc công bố đến nay đã trải qua nhiều phiên bản 1.x (1.0, 1.1, 1.2, 1.3), đến ngày nay là phiên bản 2.x.

HTTP/2 được công bố trong bản RFC 7540 vào tháng 7 năm 2015.[11]

HTTP SessionSửa đổi

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,...

HTTPS:\\ AuthenticationSửa đổi

HTTP Request methodsSửa đổi

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.

HTTP ResponseSửa đổi

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 dòng trạng thái (Status-Line)
  • Không hoặc nhiều hơn các trường Header (General | Response | Entity) được theo sau CRLF
  • Một dòng trống chỉ dòng kết thúc của các trường header
  • Một phần thân thông báo tùy ý

Server responseSửa đổi

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.

HTTP Status CodeSửa đổi

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:

1xx: Thông tinSửa đổi

Nó nghĩa là yêu cầu đã được nhận và tiến trình đang tiếp tục.

   100 (Continue)Sửa đổi

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.

101 (Switching protocols)Sửa đổ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

2xx: Thành côngSửa đổi

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.

200 (Successful)Sửa đổi

Các máy chủ xử lý yêu cầu thành công

201 (Created)Sửa đổi

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.

202 (Accepted)Sửa đổi

Máy chủ đã chấp nhận yêu cầu, nhưng vẫn chưa xử lý nó

203 (Non-authoritative information)Sửa đổi

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.

204 (No content)Sửa đổi

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

205 (Reset content)Sửa đổi

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

206 (Partial content)Sửa đổi

Các máy chủ xử lý thành công một phần của một yêu cầu

3xx: Sự điều hướng lạiSửa đổi

Nó nghĩa là hoạt động phải được thực hiện để hoàn thành yêu cầu.

301 (Moved permanently)Sửa đổi

Các trang web yêu cầu đã bị di chuyển vĩnh viễn tới URL mới

302 (Moved temporarily)Sửa đổi

Trang được yêu cầu đã di chuyển tạm thời tới một URL mới

304 (Not modified)Sửa đổ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.

4xx: Lỗi ClientSửa đổi

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

400 (Bad request)Sửa đổi

Các máy chủ không hiểu được yêu cầu.

401 (Not authorized)Sửa đổi

Đề 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)

403 (Forbidden)Sửa đổi

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)

404 (Not found)Sửa đổi

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ủ.

405 (Method not allowed)Sửa đổi

Phương thức được xác định trong yêu cầu là không được cho phép.

406 (Not acceptable)Sửa đổi

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.

407 (Proxy authentication required)Sửa đổi

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.

408 (Request timeout)Sửa đổi

Request tốn thời gian dài hơn thời gian máy chủ phản hồi

409 (Conflict)Sửa đổ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.

410 (Gone)Sửa đổi

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.

411 (Length required)Sửa đổi

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ó

412 (Precondition failed)Sửa đổi

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.

413 (Request entity too large)Sửa đổi

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ý.

414 (Requested URI is too long)Sửa đổi

URI yêu cầu (thường là một URL) là quá dài đối với máy chủ để xử lý.

416 (Requested range not satisfiable)Sửa đổi

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.

417 (Expectation failed)Sửa đổi

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.

5xx: Lỗi ServerSửa đổ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.

500 (Internal server error)Sửa đổi

Các máy chủ gặp lỗi và không thể thực hiện yêu cầu.

501 (Not implemented)Sửa đổi

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.

502 (Bad gateway)Sửa đổi

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.

503 (Service unavailable)Sửa đổi

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.

504 (Gateway timeout)Sửa đổ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.

505 (HTTP version not supported)Sửa đổi

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

HTTP Response Header FieldsSửa đổi

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;

HTTP CACHINGSửa đổi

Encrypted connectionsSửa đổi

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)

Liên quanSửa đổi

Tham khảoSửa đổi

  1. ^ Fielding, Roy T.; Gettys, James; Mogul, Jeffrey C.; Nielsen, Henrik Frystyk; Masinter, Larry; Leach, Paul J.; Berners-Lee, Tim (June 1999). Hypertext Transfer Protocol – HTTP/1.1. IETF. RFC 2616. https://tools.ietf.org/html/rfc2616. 
  2. ^ “Can I use... Support tables for HTML5, CSS3, etc”. caniuse.com. Truy cập ngày 2 tháng 6 năm 2020.
  3. ^ “Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension”. IETF. tháng 7 năm 2014. RFC 7301.
  4. ^ Belshe, M.; Peon, R.; Thomson, M. “Hypertext Transfer Protocol Version 2, Use of TLS Features”. Bản gốc lưu trữ ngày 15 tháng 7 năm 2013. Truy cập ngày 10 tháng 2 năm 2015.
  5. ^ Benjamin, David. “Using TLS 1.3 with HTTP/2”. tools.ietf.org (bằng tiếng Anh). Truy cập ngày 2 tháng 6 năm 2020. This lowers the barrier for deploying TLS 1.3, a major security improvement over TLS 1.2.
  6. ^ Bishop, Mike (ngày 9 tháng 7 năm 2019). “Hypertext Transfer Protocol Version 3 (HTTP/3)”. tools.ietf.org (bằng tiếng Anh). draft-ietf-quic-http-22. Truy cập ngày 16 tháng 8 năm 2019.
  7. ^ Cimpanu, Catalin. “HTTP-over-QUIC to be renamed HTTP/3 | ZDNet”. ZDNet (bằng tiếng Anh). Truy cập ngày 19 tháng 11 năm 2018.
  8. ^ Cimpanu, Catalin (ngày 26 tháng 9 năm 2019). “Cloudflare, Google Chrome, and Firefox add HTTP/3 support”. ZDNet. Truy cập ngày 27 tháng 9 năm 2019.
  9. ^ “HTTP/3: the past, the present, and the future”. The Cloudflare Blog (bằng tiếng Anh). 26 tháng 9 năm 2019. Truy cập ngày 30 tháng 10 năm 2019.
  10. ^ “Firefox Nightly supports HTTP 3 - General - Cloudflare Community”. 19 tháng 11 năm 2019. Bản gốc lưu trữ ngày 6 tháng 6 năm 2020. Truy cập ngày 23 tháng 1 năm 2020.
  11. ^ a b “RFC 1945”.

Liên kết ngoàiSửa đổi

  1. HTTP Protocol w3c.org. Liên kết: https://www.w3.org/Protocols/
  2. Hypertext Transfer Protocol wikipedia https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
  3. Bản RFC 2616 https://tools.ietf.org/html/rfc2616