HTTP Request

daipt

Well-known member
Một HTTP client (máy khách) gửi một HTTP request (yêu cầu) lên server (máy chủ) nhờ một thông điệp có định dạng như sau:
  • Một dòng Request-line
  • Không có hoặc có thêm các header (General|Request|Entity) theo sau bởi một ký hiệu CRLF (carriage return line feed – báo hiệu trở về đầu dòng tiếp theo)
  • Một dòng trống (VD một dòng mà không có gì ở trước CRLF) báo hiệu kết thúc phần header
  • Có hoặc không có phần nội dung thông điệp.
Tiếp theo chúng ta sẽ tìm hiểu từng thành phần được sử dụng trong một HTTP request.
Request-Line
Request-line được bắt đầu bằng một token (dấu hiệu, báo hiệu), theo sau là một Request-URI cùng với phiên bản của giao thức và kết thúc với CRLF. Các thành phần được chia tách bằng khoảng trống.

Request-Line = Method SP Request:-URI SP HTTP-Version CRLF

VD: GET http://codegym.vn/career/ HTTP/1.1

Chúng ta sẽ thảo luận từng thành phần được mô tả trong Request-Line.

Request Method
Phương thức request xác định phương thức (HTTP Method)) sẽ được thực hiện đối với tài nguyên được chỉ định bởi Request-URI. Tên phương thức phân biệt hoa thường và luôn được lưu ý là sử dụng các chữ cái viết hoa. Bảng sau liệt kê tất cả các phương thức được hỗ trợ trong HTTP/1.1.



#Phương thức và mô tả
1GET

Phương thức được sử dụng để lấy thông tin gửi về từ server sử dụng một URI. Các request sử dụng GET chỉ để nhận lại dữ liệu và do đó không gây ảnh hưởng gì đến dữ liệu.
2HEAD

Giống như phương thức GET, nhưng nó chỉ dùng để chuyển dòng trạng thái (status line) và phần header.
3POST

Đây là một phương thức request được sử dụng để gửi dữ liệu lên server, ví dụ, thông tin khách hàng, tệp tin được tải lên, v.v. sử dụng biểu mẫu (form) HTML.
4PUT

Phương thức thay thế toàn bộ biểu diễn hiện tại của tài nguyên đích bằng nội dung được tải lên.
5DELETE

Xóa bỏ toàn bộ biểu diễn hiện tại của tài nguyên đích được chỉ ra bởi URI.
6CONNECT

Phương thức dùng để thiết lập một tunnel (“đường ống”) tới server được chỉ định bởi URI.
7OPTIONS

Mô tả các lựa chọn giao tiếp đối với tài nguyên đích.
8TRACE

Thực thi một kiểm thử thông điệp loop-back cùng với đường dẫn (path) tới tài nguyên đích.
Request-URI
Request-URI là một bộ Nhận dạng (định danh) Tài nguyên Thống nhất (Uniform Resource Identifier) và xác định tài nguyên để thực hiện request. Dưới đây là một định dạng phổ biến nhất được sử dụng để mô tả một URI:

Request-URI = “*” | absoluteURI | abs_path | authority



#Phương thức và mô tả
1Dấu hoa thị (*) được sử dụng khi một HTTP request không được thực hiện với một tài nguyên cụ thể, nhưng bản thân server chỉ cho phép điều này khi phương thức không nhất thiết phải áp dụng cho tài nguyên, Ví dụ:

OPTIONS * HTTP/1.1
2absoluteURIđược sử dụng khi một HTTP request được được thực hiện với một proxy. Proxy được yêu cầu chuyển tiếp request hoặc dịch vụ từ một bộ cache (đệm) hợp lệ và trả lại phản hồi (response). Ví dụ:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
3Định dạng phổ biến nhất của Request-URI được sử dụng để xác định một tài nguyên trên server hoặc gateway gốc. Ví dụ, một client muốn lấy trực tiếp một tài nguyên từ server nguồn sẽ tạo ra một kết nối TCP tới cổng 80 của host “www.w3.org” và gửi dòng thông tin sau:

GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org

Lưu ý rằng đường dẫn tuyệt đối không thể để trống; nếu không có gì để thể hiện trong URI nguồn, bạn phải đưa vào đó ký hiệu “/” (thư mục gốc trên server).
Các thành phần của Request Header
Chúng ta sẽ nghiên cứu về General-header và Entity-header trong một chương riêng khi học về các trường của HTTP header. Bây giờ chúng ra sẽ tìm hiểu xem các thành phần của HTTP header là gì.

Các thành phần của request-header cho phép client truyền các thông tin bổ sung cho request, và thông tin của chính client tới server. Những thành phần này hoạt động như những request modifier (phần sửa đổi của request). Dưới đây là một danh sách các thành phần quan trọng của Request-header:

  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Authorization
  • Expect
  • From
  • Host
  • If-Match
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • If-Unmodified-Since
  • Max-Forwards
  • Proxy-Authorization
  • Range
  • Referer
  • TE
  • User-Agent
Bạn có thể thêm vào các thành phần tùy chỉnh của mình trong trường hợp bạn sẽ viết một Client và Web Server của riêng mình.

Ví dụ về Request Message
Bây giờ chúng ta sẽ tổng hợp tất cả các thông tin lại với nhau để xây dựng một HTTP request nhằm lấy thông tin từ trang hello.htm từ web server của trang web tutorialspoint.com.
GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive


Ở đây chúng ta không gửi bất kỳ một request data nào tới server bởi vì chúng ta đang lấy về một trang HTML đơn giản từ server. Kết nối là một general-header và phần còn lại của header là các request header. Ví dụ dưới đây cho thấy cách để gửi dữ liệu tới server sử dụng phần thân của thông điệp request (message body):

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
licenseID=string&content=string&/paramsXML=string


Ở đây, URL /cgi-bin/process.cgi sẽ được sử dụng để xử lý dữ liệu được gửi lên và do đó sẽ có một phản hồi (response) được trả lại. Trong đó content-type thông báo với server rằng dữ liệu gửi đến là các dữ liệu từ một biểu mẫu (form) đơn giản và length sẽ chỉ ra độ dài thực sự của dữ liệu nằm trong phần thân của thông điệp (message body). Ví dụ dưới đây cho thấy cách bạn có thể truyền một nội dung XML đơn giản tới web server:

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://clearforest.com/">string</string>
 
Bên trên