HTTP là viết tắt của giao thức truyền tải siêu văn bản là một giao thức cấp độ ứng dụng cho các hệ thống thông tin phân phối, cộng tác và đa phương tiện. Đây là nền tảng cho giao tiếp thông tin cho World Wide Web từ 1990.
Trang 1http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1
Mục lục
Giới thiệu về giao thức HTTP 5
Đối với độc giả 6
Điều kiện tiền đề 6
Tổng quan về HTTP 6
Các đặc trưng cơ bản 6
Cấu trúc cơ bản 7
Client 8
Server 8
Các tham số trong HTTP 8
Phiên bản HTTP 8
Ví dụ 8
Uniform Resource Identifiers - Bộ nhận diện nguồn tài nguyên đồng nhất 9
Ví dụ 9
Các định dạng Ngày/Thời gian 9
Các bộ ký tự 9
Ví dụ 9
Mã hóa nội dung 10
Ví dụ 10
Các kiểu đa phương tiện (media types) 10
Ví dụ 11
Các thẻ ngôn ngữ 11
Ví dụ 11
Message trong HTTP 11
Dòng đầu thông báo (start-line) 12
Các trường Header 13
Phần thân thông báo 14
Yêu cầu (Request) trong HTTP 14
Trang 2http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 2
Dòng Yêu cầu 15
Method yêu cầu 15
Request-URI 16
Các trường Header Yêu cầu 17
Các ví dụ của Thông báo Yêu cầu 19
Phản hồi (Response) trong HTTP 20
Dòng trạng thái 20
Phiên bản HTTP 21
Mã hóa trạng thái 21
Các trường Header Phản hồi 22
Các ví dụ về Thông báo Phản hồi 22
Phương thức trong HTTP 24
Phương thức GET 25
Phương thức HEAD 26
Phương thức POST 27
Phương thức PUT 28
Phương thức DELETE 29
Phương thức CONNECT 29
Phương thức OPTIONS 30
Phương thức TRACE 30
Mã hóa trạng thái trong HTTP 31
1xx: Thông tin 32
2xx: Thành công 32
3xx: Sự điều hướng lại 33
4xx: Lỗi Client 34
5xx: Lỗi Server 36
Các trường Header trong HTTP 36
General Header 37
Trường Cache-Control 37
Trang 3http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 3
Trường Connection 40
Trường Date 40
Trường Pragma 41
Trường Trailer 41
Trường Transfer-Encoding (Mã hóa truyền tải) 41
Trường Upgrade 41
Trường Via 42
Trường Warning (Cảnh báo) 42
Các trường Header yêu cầu trên Client 42
Trường Accept (Chấp nhận) 42
Trường Accept-Charset 43
Trường Accept-Encoding 43
Trường Accept-Language 43
Trường Authorization (Sự ủy quyền) 44
Trường Cookie 44
Trường Expect 44
Trường From 44
Trường Host 45
Trường If-Match 45
Trường If-Modified-Since 45
Trường If-None-Match 46
Trường If-Range 46
Trường If-Unmodified-Since 46
Trường Max-Forwards 47
Trường Proxy-Authorization 47
Trường Range 47
Trường Referer 48
Trường TE 48
Trường User-Agent 49
Trang 4http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 4
Các trường Phản hồi từ Server 49
Trường Accept-Ranges 49
Trường Age 49
Trường ETag 50
Trường Location 50
Trường Proxy-Authenticate 50
Trường Retry-After 51
Trường Server 51
Trường Set-Cookie 51
Trường Vary 52
Trường WWW-Authenticate 53
Entity Headers 53
Trường Allow 53
Trường Content-Encoding 53
Trường Content-Language 54
Trường Content-Length 54
Trường Content-Location 54
Trường Content-MD5 55
Trường Content-Range 55
Trường Content-Type 56
Trường Expires 56
Trường Last-Modified 56
Caching trong HTTP 56
Mã hóa URL trong HTTP 59
Bảo mật trong HTTP 66
Sự rò rỉ thông tin cá nhân 66
Sự tấn công dựa trên các tên Path và File 67
Việc đánh lừa DNS (DNS Spoofing) 67
Vị trí các Header và việc đánh lừa 68
Trang 5http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 5
Ủy nhiệm xác minh 68
Các sự ủy quyền và việc ghi vào bộ nhớ ẩn 68
Ví dụ về Message trong HTTP 68
Ví dụ 1 68
Client yêu cầu: 68
Server phản hồi: 69
Ví dụ 2 69
Client yêu cầu 69
Server phản hồi 69
Ví dụ 3 70
Client yêu cầu 70
Server phản hồi 70
Ví dụ 4 71
Client yêu cầu 71
Server phản hồi 71
Tài liệu tham khảo về HTTP 72
Các đường link hữu ích về HTTP 72
Giới thiệu về giao thức HTTP HTTP là viết tắt của Giao thức truyền tải siêu văn bản (Hypertext Transfer Protocol) là một giao thức cấp độ ứng dụng cho các hệ thống thông tin phân phối, cộng tác và đa phương tiện Đây là nền tảng cho giao tiếp thông tin cho World Wide Web (ví dụ: Internet) từ 1990 HTTP là một giao thức chung và stateless mà có thể được sử dụng cho các mục đích khác cũng như các sự mở rộng của các phương thức yêu cầu, các code lỗi và Header của nó
Phần hướng dẫn này được xây dựng trên cơ sở các chi tiết kỹ thuật RFC-2616, mà xác định giao thức có liên quan như HTTP/1.1 HTTP/1.1 là một phiên bản của HTTP ban đầu (HTTP/1.0) Sự khác biệt lớn giữa HTTP/1.0 và HTTP/1.1 là HTTP/1.0 sử dụng một kết nối mới cho mỗi Yêu
Trang 6http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 6
cầu/Phản hồi trao đổi, trong khi đó kết nối trong HTTP/1.1 có thể được sử dụng cho một hoặc nhiều Yêu cầu/Phản hồi trao đổi
Loạt bài hướng dẫn của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint
Đối với độc giả Phần hướng dẫn này đã được chuẩn bị cho các học viên nghiên cứu về khoa học máy tính và các nhà phát triển web để giúp họ có kiến thức cơ bản về các khái niệm các mức độ phát triển của HTTP
Điều kiện tiền đề Trước khi tiến hành học tập với phần hướng dẫn này, nó là tốt cho bạn khi bạn có một sự hiểu biết
cơ bản về các khái niệm web, các trình duyệt web, các Server, và phần mềm xây dựng trên cơ sở cấu trúc Server-Client
Tổng quan về HTTP HTTP là một giao thức cấp độ ứng dụng cho các hệ thống thông tin phân phối, cộng tác, đa phương tiện Đây là nền tảng cho giao tiếp dữ liệu cho WWW (ví dụ: Internet) từ 1990 HTTP là một giao thức chung và stateless mà có thể được sử dụng cho các mục đích khác cũng như các
sự co giãn của các phương thức yêu cầu, các code lỗi và Header của nó
Theo cơ bản, HTTP là một giao thức giao tiếp trên cơ sở TCP/IP, mà được sử dụng để phân phối
dữ liệu (các tệp HTML, các file ảnh, …) trên WWW Cổng mặc định là TCP 80, những các cổng khác cũng có thể được sử dụng Nó cung cấp một cách được tiêu chuẩn hóa cho các máy tính để giao tiếp với nhau Chi tiết kỹ thuật HTTP xác định cách mà dữ liệu yêu cầu của Client sẽ được xây dựng và được gửi tới Server, và cách để Server phản hồi các yêu cầu này
Các đặc trưng cơ bản
Có 3 đặc trưng cơ bản mà làm HTTP trở thành một giao thức đơn giản nhưng đầy sức mạnh:
HTTP là giao thức connectionless (kết nối không liên tục): Client của HTTP, ví dụ: một
trình duyệt khởi tạo một yêu cầu HTTP và sau đó một yêu cầu được tạo ra, Client ngắt kết nối từ Server và đợi cho một phản hồi Server xử lý yêu cầu và thiết lập lại sự kết nối với Client để gửi phản hồi trở lại
Trang 7http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 7
HTTP là một phương tiện độc lập: Nó nghĩa là, bất kỳ loại dữ liệu nào cũng có thể được
gửi bởi HTTP miễn là Server và Client biết cách để kiểm soát nội dung dữ liệu Nó được yêu cầu cho Client cũng như Server để xác định kiểu nội dung bởi sử dụng kiểu MIME thích hợp
HTTP là stateless: Như đã được đề cập ở trên, HTTP là connectionless và nó một kết quả
trực tiếp là HTTP trở thành một giao thức Stateless Server và Client biết về nhau chi trong một yêu cầu hiện tại Sau đó, cả hai chúng nó quên tất cả về nhau Do bản chất của giao thức, cả Client và các trình duyệt có thể giữ lại thông tin giữa các yêu cầu khác nhau giữa các trang web
HTTP/1.0 sử dụng một kết nối mới cho mỗi trao đổi Yêu cầu/Phản hồi (Request/Reponse), trong khi mà kết nối của HTTP/1.1 có thể được sử dụng cho một hoặc nhiều trao đổi Yêu cầu/Phản hồi
Cấu trúc cơ bản
Sơ đồ dưới đây chỉ cấu trúc rất đơn giản của một ứng dụng web và miêu tả vị trí của HTTP:
Trang 8http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 8
Giao thức HTTP là một giao thức Yêu cầu/Phản hồi dựa trên cấu trúc Client/Server, nơi mà các trình duyệt web, các thiết bị tìm kiếm,… hoạt động như các Client, và các Server web hoạt động như một Server
Client
Client gửi một yêu cầu tới Server theo mẫu của một phương thức yêu cầu, URI, và phiên bản giao thức, được theo bởi một thông báo MIME chứa các bộ chỉnh sửa yêu cầu, thông tin Client, và nội dung đối tượng có thể qua một kết nối TCP/IP
Server
Server phản hồi với một dòng trạng thái, bao gồm phiên bản giao thức của thông báo và một code thành công hoặc lỗi, theo sau bởi một thông báo MIME chứa thông tin Server, thông tin thực thể đa phương tiện và nội dung đối tượng có thể
Các tham số trong HTTP Chương này liệt kê một số các Tham số giao thức HTTP và cú pháp của chúng mà theo đó chúng được sử dụng trong giao tiếp Ví dụ, định dạng ngày tháng, định dạng URL, … Điều này sẽ giúp bạn trong việc xây dựng yêu cầu của bạn và các thông tín phản hồi trong khi viết các chương trình Client hoặc Server Bạn sẽ thấy sự hữu ích hoàn toàn của những tham số này trong các chương
kế tiếp trong khi học tập về cấu trúc thông báo cho các yêu cầu và các phản hồi HTTP
Phiên bản HTTP
HTTP sử dụng một sơ đồ đánh số <major>.<minor> để chỉ phiên bản của giao thức Phiên bản
của một thông báo HTTP được chỉ bởi một trường HTTP-Version trong dòng đầu tiên Tại đây là cú pháp chung của việc xác định số phiên bản HTTP:
HTTP - Version = "HTTP" "/" * DIGIT "." * DIGIT
Ví dụ
HTTP / 1.0
or
HTTP / 1.1
Trang 9http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 9
Uniform Resource Identifiers - Bộ nhận diện nguồn tài nguyên đồng nhất
URI là một chuỗi được định dạng, nhạy cảm với chữ hoa-thường (case-insentive) theo một cách đơn giản chứa tên, vị trí, để xác định một nguồn, ví dụ, một website, một dịch vụ web, … Một cú pháp chung của URI được sử dụng cho HTTP như sau:
URI = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Ở đây, nếu port là trống hoặc không được cung cấp, thì port 80 được cho là cho HTTP và một abs_path trống là tương đương với một abs_path là “/” Các ký tự khác trong các bộ thiết lập reserved và unsafe là tương đương với mã hóa “%” HEX HEX” của chúng
Tất cả các nhãn Ngày/Thời gian HTTP Phải được biểu diễn trong Greenwich Mean Time (GMT),
không có sự ngoại trừ Các ứng dụng HTTP được cho phép để sử dụng 3 nhãn đại diện Ngày/Thời gian sau:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
Các bộ ký tự
Chúng ta sử dụng các bộ ký tự để xác định các thiết lập ký tự mà Client ưa thích Nhiều bộ thiết lập
ký tự có thể được liệt kê riêng biệt bởi các dấu phảy Nếu một giá trị là không được xác định, mặc định là US-ASII
Ví dụ
Dưới đây là các bộ ký tự có hợp lệ:
US-ASCII
Trang 10http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 10
or
ISO-8859-1
or
ISO-8859-7
Mã hóa nội dung
Một giá trị mã hóa nội dung chỉ rằng một thuật toán mã hóa đã được sử dụng để mã hóa nội dung trước khi truyền nó tới mạng Mã hóa nội dung được sử dụng lần đầu để cho phép một tài liệu để được nén hoặc ngoài ra được truyền tải mà không thất lạc sự nhận diện
Tất cả các giá trị mã hóa nội dung là không phân biệt kiểu chữ (case-insensitive) HTTP/1.1 sử
dụng các giá trị mã hóa nội dung trong các trường Accept-Encoding và Content-EncodingHeader
mà chúng ta sẽ quan sát trong các chương kế tiếp
Các kiểu đa phương tiện (media types)
HTTP sử dụng các Kiểu phương tiện Internet trong các trường Content-Type và Accept để cung
cấp dữ liệu mở và có thể mở rộng Tất cả các giá trị kiểu phương tiện được đăng ký với IANA (Internet Assigned Number Authority) Cú pháp chung để xác định kiểu phương tiện như sau:
media-type = type "/" subtype *( ";" parameter )
Trang 11http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 11
Các thuộc tính type, subtype, và parameter là case-insensitive
Ví dụ
Accept: image/gif
Các thẻ ngôn ngữ
HTTP sử dụng các thẻ ngôn ngữ trong các trường Accept-Language và Content-Language Một
thẻ ngôn ngữ bao gồm một hoặc nhiều phần: Một thẻ ngôn ngữ sơ cấp và một dãy các thẻ phụ:
language-tag = primary-tag *( "-" subtag )
Các khoảng trắng không được cho phép trong thẻ và tất cả các thẻ là case-insentive
Ví dụ
Các thẻ ví dụ bao gồm:
en, en-US, en-cockney, i-cherokee, x-pig-latin
Hai chữ primary-tag là một chữ viết tắt cho ngôn ngữ trong ISO-639 và hai ký tự đầu tiên trong thẻ phụ subtag là mã quốc gia
Message trong HTTP HTTP được xây dựng trên cơ sở mô hình cấu trúc Client-Server và giao thức Stateless các Yêu cầu/Phản hồi mà điều hành bởi việc trao đổi các thông báo (Message) dọc theo một kết nối TCP/IP
Một Client là một chương trình (một trình duyệt hoặc bất kỳ Client) mà thiết lập một kết nối tới một Server cho mục đích gửi một hoặc nhiều thông báo yêu cầu HTTP Một HTTP “Server” là một chương trình (hiểu theo cách chung là một Server web như Apache Server web hoặc Internet Information Services – IIS …) mà chấp nhận các kết nối để phục vụ các yêu cầu HTTP bởi việc gửi các thông báo phản hồi HTTP
HTTP sử dụng URI để nhận diện một nguồn đã cho và để thiết lập một kết nối Một khi một kết nối
được thiết lập, Các Thông báo HTTP được truyền trong một định dạng tương tự như được sử
dụng trong thư điện tử Internet Mail [RFC5322] và MIME (Multipurpose Internet Mail Extensions)
[RFC2045] Các thông báo này bao gồm các Yêu cầu từ Client tới Server và các Phản hồi từ
Server tới Client mà sẽ theo định dạng sau:
Trang 12http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 12
HTTP - message = < Request > | < Response > ; HTTP / 1.1 messages
Các yêu cầu HTTP và các phản hồi HTTP sử dụng một định dạng thông báo chung của RFC 822 cho truyền trải dữ liệu được yêu cầu Định dạng thông báo chung này bao gồm 4 mục:
Một dòng đầu tiên
Không hoặc nhiều trường Header theo sau bởi CRLF
Một dòng trống (ví dụ: một dòng mà không có gì trước CRLF), chỉ phần cuối của trường Header
Một thân thông báo tùy ý
Trong các mục tiếp theo, chúng ta sẽ giải thích từng mục được sử dụng trong thông báo HTTP
Dòng đầu thông báo (start-line)
Một dòng đầu sẽ có cú pháp chung như sau:
start-line = Request-Line | Status-Line
Chúng ta sẽ bàn luận Request-Line và Status-Line trong khi thảo luận về các thông báo Yêu cầu
HTTP và Phản hồi HTTP tương ứng Bây giờ, chúng ta xem xét một số ví dụ về dòng bắt đầu trong trường hợp yêu cầu và phản hồi
Trang 13http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 13
GET /hello.jsp HTTP/1.1 (This is Request-Line sent by the client)
HTTP/1.1 200 OK (This is Status-Line sent by the server)
Các trường Header
Các trường Header cung cấp thông tin được yêu cầu về yêu cầu hoặc phản hồi, hoặc về đối tượng được gửi trong thân thông báo Có 4 kiểu của Header trong các thông báo HTTP:
Kiểu chung (General-Header): Các trường Header này có khả năng ứng dụng chung cho
cả các thông báo yêu cầu và phản hồi
Kiểu yêu cầu (Request-Header): Các trường Header này chỉ có khả năng áp dụng cho các
thông báo yêu cầu
Kiểu phản hồi (Response-Header): Các trường Header này chỉ có khả năng áp dụng cho
các thông báo phản hồi
Kiểu thực thể (Entity-Header): Các trường này xác định thông tin về thân-thực thể hoặc,
nếu không có phần thân nào hiển thị, về nguồn được nhận diện bởi yêu cầu
Tất cả các Header được đề cập ở trên theo một định dạng chung và mỗi một trường Header bao gồm một tên được theo sau bởi một dấu hai chấm (:) và giá trị trường như sau:
message-header = field-name ":" [ field-value ]
Dưới đây là ví dụ về các trường Header đa dạng:
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Trang 14http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 14
Phần thân thông báo là tùy ý cho một thông báo HTTP nhưng nếu nó là có sẵn, thì khi đó nó được
sử dụng để mang phần thân được liên kết với yêu cầu hoặc phản hồi Nếu phần thân thực thể được liên kết, thì sau đó thường các dòng Content-Type và Content-Length xác định bản chất của phần thân được liên kết
Một phần thân thông báo là phần mà mang dữ liệu yêu cầu HTTP thực sự (bao gồm dữ liệu mẫu
và được tải lên,…) và dữ liệu phản hồi HTTP từ Server (bao gồm các file, ảnh, …) Dưới đây là nội dung đơn giản của một phần thân thông báo:
Yêu cầu (Request) trong HTTP
Một Client gửi một yêu cầu HTTP tới một Server trong mẫu một thông báo yêu cầu mà bao gồm định dạng sau:
Một dòng yêu cầu
Không hoặc nhiều hơn trường Header (General|Request|Entity) được theo sau bởi CRLF
Trang 15http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 15
Một dòng trống (ví dụ: một dòng không có gì đằng trước CRLF) chỉ phần kết thúc của trường Header
Một phần thân thông báo tùy ý
Các phần dưới giải thích cách sử dụng của mỗi đối tượng trong thông báo yêu cầu HTTP
Dòng Yêu cầu
Dòng Yêu cầu bắt đầu với một thủ tục method, được theo sau bởi một Request-URI và phiên bản giao thức, và kết thúc với CRLF Các yếu tố được phân biệt riêng rẽ bởi các ký tự khoảng trống
SP
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Dưới đây thảo luận về mỗi phần được đề cập trong Dòng Yêu cầu
Method yêu cầu
method yêu cầu chỉ phương thức để được thực hiện trên nguồn được nhận diện URI đã cung cấp Method là case-intensive và nên luôn luôn được đề cập trong chữ hoa Bảng
bởiRequest-dưới đây liệt kê tất cả các method được hỗ trợ trong HTTP/1.1
STT Phương thức và Miêu tả
GET được sử dụng để lấy lại thông tin từ Server đã cung cấp bởi sử dụng một URI đã cung cấp Các yêu cầu sử dụng GET nên chỉ nhận dữ liệu và nên không có ảnh hưởng gì tới dữ liệu
Trang 16http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 16
Request-URI là một Bộ nhận diện Nguồn Đồng nhất (URI) và xác định nguồn mà áp dụng yêu cầu
Dưới đây là các mẫu thường được sử dụng để xác định một URI:
Trang 17http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 17
Request-URI = "*" | absoluteURI | abs_path | authority
STT Phương thức và Miêu tả
1 Một dấu * được sử dụng khi một yêu cầu HTTP không áp dụng tới
một nguồn cụ thể, nhưng tới chính Server đó, và chỉ được cho phép
khi phương thức được sử dụng không cần thiết áp dụng tới một
nguồn Ví dụ:
OPTIONS * HTTP/1.1
2 absoluteURI được sử dụng khi một yêu cầu HTTP đang được tạo ra
cho một sự ủy nhiệm Sự ủy nhiệm được yêu cầu chuyển tới yêu cầu hoạc dịch vụ từ một cache hiệu lực, và trả lại phản hồi Ví dụ:
GET http://www.w3.org/pub/WWW/TheProject.jspl HTTP/1.1
3 Mẫu phổ biến nhất của Request-URI được sử dụng để xác định một
nguồn trên một Server hoặc gateway ban đầu Ví dụ, một Client mong muốn lấy được một nguồn một cách trực tiếp từ Server ban đầu sẽ
tạo một kết nối TCP tới port 80 của host www.w3.org và gửi các dòng sau:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
Ghi chú rằng, đường truyền tuyệt đối không thể là trống rỗng; nếu không gì được trình bày trong URI ban đầu, nó Phải được cung cấp như là “/” (Server root)
Các trường Header Yêu cầu
Chúng ta sẽ học General-Header và Entity-Header trong một chương riêng khi chúng ta sẽ học về các trường Header Bây giờ, chúng ta xem các trường Header yêu cầu là gì:
Trang 18http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 18
Các trường Request-Header cho phép Client truyền thông tin thêm về yêu cầu, và về chính Client
đó, tới Server Những trường này hoạt động như các bộ chỉnh sửa yêu cầu Dưới đây là một danh sách các trường Request-Header quan trọng mà có thể được sử dụng dựa trên sự yêu cầu:
Trang 19http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 19
Các ví dụ của Thông báo Yêu cầu
Bây giờ chúng ta đặt tất cả những thứ đã học ở trên cùng với nhau để tạo một yêu cầu HTTP để
chỉ thị trang hello.htm từ Server chạy trên tutorialspoint.com
Ở đây, URl được cung cấp /cgi-bin/process.cgi sẽ được sử dụng để xử lý dữ liệu được truyền và
theo đó, một phản hồi sẽ được trả lại Ở đây content-type nói cho Server rằng dữ liệu được truyền
là một dữ liệu mẫu web đơn giản và length sẽ là độ dài thực của dự liệu đặt trong phần thân thông
báo Ví dụ sau chỉ cách bạn có thể truyền XML thuần tới Server của bạn
Trang 20http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 20
Connection: Keep-Alive
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://clearforest.com/">string</string>
Phản hồi (Response) trong HTTP
Sau khi nhận và phiên dịch một thông báo yêu cầu, một Server gửi tín hiệu phản hồi với một thông báo phản hồi HTTP
Một phần thân thông báo tùy ý
Các khu vực dưới đây giải thích cách sử dụng của mỗi đối tượng trong một thông báo phản hồi HTTP
Dòng trạng thái
Một dòng trạng thái bao gồm phiên bản giao thức được theo sau bởi một mã hóa trạng thái số và cụm từ thuần văn bản được liên kết của nó
Trang 21http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 21
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
3 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
Trang 22http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 22
khả thi
Mã hóa trạng thái HTTP là có thể co giãn và ứng dụng HTTP không được yêu cầu để hiểu ý nghĩa của tất cả các mã trạng thái được đăng ký Một danh sách của tất cả các mã trạng thái đã được cung cấp trong một chương riêng biệt cho bạn tham khảo
Các trường Header Phản hồi
Chúng ta sẽ học General-Header và Entity-Header trong một chương riêng biệt khi chúng ta sẽ học
về các trường Header Bây giờ, chúng ta tìm hiểu xem các trường Header phản hồi là gì:
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
Các ví dụ về Thông báo Phản hồi
Bây giờ chúng ta đặt tất cả các thứ trên cùng với nhau để tạo một phản hồi HTTP cho một yêu cầu
để chỉ thị trang hello.jsp từ Server đang chạy trên tutorialspoint.com
Trang 23http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 23
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
Trang 24http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 24
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
STT Phương thức và miêu tả
GET được sử dụng để lấy lại thông tin từ Server đã cung cấp bởi sử dụng một URI đã cung cấp Các yêu cầu sử dụng GET nên chỉ nhận dữ liệu và nên không có ảnh hưởng gì tới dữ liệu
Tương tự như GET, nhưng nó truyền tải dòng trạng thái và khu vực
Trang 25http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 25
Một yêu cầu GET lấy dữ liệu từ một Server bởi việc xác định các tham số trong đoạn URL của yêu
cầu Đây là phương thức chính được sử dụng để thu hồi tài liệu Ví dụ sau chỉ cách sử dụng của
phương thức GET để chỉ thị hello.htm:
GET /hello.htm HTTP/1.1
Trang 26http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 26
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Phương thức HEAD là có chức năng tương tự như GET, ngoại trừ là Server phản hồi với một
dòng và các Header phản hồi, nhưng không có phần thân đối tượng Ví dụ sau chỉ cách sử dụng
của phương thức HEAD để chỉ thị thông tin Header về hello.htm:
Trang 27http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 27
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Phương thức POST được sử dụng khi bạn muốn gửi một vài dữ liệu tới Server, ví dụ, cập nhật
file, dữ liệu mẫu, … Ví dụ sau đây chỉ cách sử dụng của phương thức POST để gửi một dữ liệu
mẫu tới Server, mà sẽ được xử lý bởi một process.cgi và cuối cùng một phản hồi sẽ được trả lại:
<? xml version ="1.0" encoding ="utf-8"?>
<string xmlns ="http://clearforest.com/" > string </string>
Bên Server, scipt process.cgi xử lý dữ liệu đã truyền và gửi phản hồi như sau:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Trang 28http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 28
Phương thức PUT được sử dụng để yêu cầu Server để lưu giữ phần thân đối tượng được bao
gồm tại một vị trí được xác định bởi URL đã cung cấp Ví dụ sau yêu cầu Server lưu phần thân đối
tượng đã cung cấp trong hello.htm tại root của Server:
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Trang 29http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 29
</html>
Phương thức DELETE
Phương thức DELETE được sử dụng để yêu cầu Server để xóa một file tại vị trí được xác định
bởi URL đã cung cấp Ví dụ sau yêu cầu Server xóa tệp đã cho hello.htm tại root của Server:
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Kết nối được thành lập với Server và phản hồi sau được gửi trả lại tới Client:
HTTP/1.1 200 Connection established
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Trang 30http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 30
Phương thức OPTIONS
Phương thức OPTIONS được sử dụng bởi Client để tìm ra các phương thức HTTP và các chức
năng được hỗ trợ bởi một Server Client có thể xác định một URL với phương thức OPTIONS hoặc một dấu * để hướng tới toàn bộ Server Ví dụ sau yêu cầu một danh sách các phương thức được
hỗ trợ bởi một Server đang chạy trên tutorialspoint.com:
OPTIONS * HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Server sẽ gửi một thông tin dựa trên định cấu hình hiện tại của Server, ví dụ:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Type: httpd/unix-directory
Phương thức TRACE
Phương thức TRACE được sử dụng để ánh xạ các nội dung của một yêu cầu HTTP tới người
yêu cầu mà có thể được sử dụng cho mục đích debug tại thời điểm của sự phát triển Ví dụ sau chỉ cách sử dụng của phương thức TRACE:
TRACE / HTTP/1.1
Host: www.tutorialspoint.com
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Server sẽ gửi thông báo sau trong phản hồi tới yêu cầu trên:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Trang 31http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 31
Mã hóa trạng thái trong HTTP 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
3 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
Trang 32http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 32
1xx: Thông tin
100 Continue Chỉ một phần của yêu cầu được nhận bởi Server, nhưng
miễn là nó không bị loại bỏ, Client nên tiếp tục với yêu cầu.
101 Switching
Protocols
Server chuyển đổi giao thức.
2xx: Thành công
201 Created Yêu cầu là hoàn thành, và một nguồn mới được tạo.
202 Accepted Yêu cầu được chấp nhận cho xử lý, nhưng việc xử lý
chưa hoàn thành.
203
Non-authoritative
Information
Thông tin trong đối tượng Header là từ một bản sao nội
bộ hoặc bên thứ 3, không từ Server ban đầu.
204 No Content Một mã trạng thái và một Header được cung cấp trong
phản hồi, nhưng không có phần thân đối tượng trong sự phản hồi.
205 Reset Trình duyệt nên dọn sạch mẫu được sử dụng cho việc
Trang 33http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 33
Content truyền tải này bởi một dữ liệu đầu vào tăng thêm.
206 Partial
Content
Server đang trả lại dữ liệu cục bộ của kích cỡ được yêu cầu Được sử dụng trong phản hồi tới một yêu cầu xác
định mộtRange Header Server phải xác định dãy được
bao gồm trong phản hồi với Content-Range header.
3xx: Sự điều hướng lại
Trang được yêu cầu đã di chuyển tới một URL mới.
302 Found Trang được yêu cầu đã di chuyển tạm thời tới một URL
Đây là mã phản hồi tới một Modified-Since hoặc
từ ngày cụ thể.
305 Use Proxy URL được yêu cầu phải được truy cập thông qua một sự
ủy quyền được đề cập trong Location Header.
Trang 34http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 34
không còn được sử dụng nữa, nhưng mã này được lưu giữ.
401 Unauthorized Trang được yêu cầu cần một tên sử dụng và một
mật khẩu.
402 Payment
Required
Bạn không thể sử dụng mã này nữa
403 Forbidden Sự truy cập tới trang được yêu cầu bị cấm.
404 Not Found Server không thể tìm thấy trang được yêu cầu.
Trang 35http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 35
411 Length Required Content-Length không được xác định rõ Server sẽ
không chấp nhận yêu cầu mà không có nó.
Trang 36http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 36
501 Not Implemented Yêu cầu không được hoàn thành Server không hỗ
trợ tính năng được yêu cầu.
phản hồi không có hiệu lực từ Server ở thượng nguồn.
Các trường Header trong HTTP
Các trường Header cung cấp thông tin được yêu cầu về yêu cầu hoặc phản hồi, hoặc về đối tượng được gửi trong phần thân thông báo Có 4 kiểu của Header thông báo HTTP:
Kiểu chung (General-Header): Các trường Header này có khả năng ứng dụng chung cho
cả các thông báo yêu cầu và phản hồi