Hypertext Transfer Protocol

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. 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 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) trong đó TLS 1.2 hoặc mới hơn là bắt buộc phải có.
HTTP/3 là sự kế thừa được đề xuất cho HTTP/2, đã đượ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 Cloudflare và Google Chrome vào tháng 9 năm 2019, và có thể được kích hoạt trong các phiên bản ổn định của Chrome và Firefox.
Lịch sử.
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.
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.
HTTP Session.
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 methods.
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 Response.
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:
Server response.
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
&lt;html&gt;
&lt;head&gt;
 &lt;title&gt;An Example Page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
 Hello World, this is a very simple HTML document.
&lt;/body&gt;
&lt;/html&gt;
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 Code.
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 tin.
Nó nghĩa là yêu cầu đã được nhận và tiến trình đang tiếp tục.
100 (Continue).
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).
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ông.
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).
Các máy chủ xử lý yêu cầu thành công
201 (Created).
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).
Máy chủ đã chấp nhận yêu cầu, nhưng vẫn chưa xử lý nó
203 (Non-authoritative information).
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).
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).
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).
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ạ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).
Các trang web yêu cầu đã bị di chuyển vĩnh viễn tới URL mới
302 (Moved temporarily).
Trang được yêu cầu đã di chuyển tạm thời tới một URL mới
304 (Not modified).
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 Client.
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).
Các máy chủ không hiểu được yêu cầu.
401 (Not authorized).
Đề 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).
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).
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).
Phương thức được xác định trong yêu cầu là không được cho phép.
406 (Not acceptable).
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).
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).
Request tốn thời gian dài hơn thời gian máy chủ phản hồi
409 (Conflict).
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).
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).
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).
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).
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).
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).
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).
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 Server.
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).
Các máy chủ gặp lỗi và không thể thực hiện yêu cầu.
501 (Not implemented).
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).
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).
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).
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).
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 Fields.
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:
Encrypted connections.
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)