Tổng quan
Hypertext Transfer Protocol (HTTP) là giao thức thuộc lớp ứng dụng web. Sử dụng kết nối TCP cổng 80. HTTP được định nghĩa trong RFC 1945 (HTTP 1.0) và RFC 2616 (HTTP 1.1).
HTTP hoạt động dựa trên mô hình client-server. Trình duyệt client thực hiện yêu cầu, nhận và hiển thị đối tượng web (gồm dữ liệu HTML, hình ảnh JPEG, Java applet, video, âm thanh, …). Trong khi, web server sẽ gửi trả lời khi nhận được yêu cầu từ client.
Hình 1. Mô hình client-server
Kết nối HTTP
Có hai loại kết nối HTTP là kết nối không bền vững và kết nối bền vững.
Kết nối không bền vững: sau khi, server gửi đi một đối tượng thì kết nối TCP sẽ được đóng. Như vậy, mỗi kết nối TCP chỉ truyền được duy nhất một yêu cầu từ client và nhận lại một thông điệp trả lời từ server.
Kết nối bền vững: server sẽ duy trì kết nối TCP cho việc gửi nhiều đối tượng. Như vậy, sẽ có nhiều yêu cầu từ client được gửi đến server trên cùng một kết nối. Thông thường kết nối TCP này sẽ được đóng lại trong một khoảng thời gian định trước.
Quy trình hoạt động của kết nối HTTP không bền vững:
Hình 2. Quy trình hoạt động kết nối HTTP không bền vững
Hình 2 thể hiện chi tiết các bước hoạt động trong kết nối HTTP không bền vững giữa HTTP client (Firefox, Chrome,…) và HTTP server (ví dụ www.hutech.edu.vn):
- Bước 1: client khởi tạo kết nối TCP bằng việc gửi yêu cầu đến server. Server nhận được yêu cầu và chấp nhận kết nối bằng việc gửi trả lời về cho client. Nếu sau khoảng thời gian RTT mà không nhận được trả lời từ phía server thì client sẽ gửi lại yêu cầu.
- Bước 2: sau khi kết nối được thiết lập, client sẽ gửi thông điệp yêu cầu chứa tên đường dẫn của các đối tượng ( ví dụ: www.hutech.edu.vn/homepage/index.php) đến server. Server nhận được thông điệp yêu cầu và tiến hành lấy ra các đối tượng được yêu cầu. Sau đó, các đối tượng được đóng gói thành thông điệp trả lời và gửi đến client.
- Bước 3: server đóng kết nối TCP (Lưu ý: server chỉ đóng kết nối TCP khi chắc chắn rằng client nhận được thông điệp trả lời)
- Bước 4: client nhận thông điệp trả lời chứa tập tin HTML và hiển thị các đối tượng.
- Bước 5: lặp lại các bước từ 1-4 cho các đối tượng khác.
* Lưu ý: Trong kết nối HTTP không bền vững cần có một RTT (Round Trip Time) để khởi tạo kết nối TCP. Ngoài ra, cần có một RTT cho thông điệp HTTP yêu cầu và một vài byte đầu tiên của thông điệp HTTP trả lời được trả về.Tổng thời gian truyền tập tin = 2RTT+ thời gian truyền.
Thời gian đáp ứng RTT làthời gian gửi một gói tin cơ bản từ client đến server rồi quay ngược lại. RTTbao gồmđộ trễtruyền gói tin và hàng đợi, độ trễtrongcác bộ định tuyếntrung gian, chuyển mạch vàxử lýgói tin.
Qui trình hoạt động của kết nối HTTP bền vững:
- Kết nối bền vững không có pipelining:
- Client phát ra yêu cầu mới, chỉ khi đáp ứng trước đó đã nhận xong.
- RTT cho mỗi đối tượng tham chiếu.
- Kết nối bền vững có pipelining:
- Mặc định có trong HTTP/1.1.
- Client gửi yêu cầu ngay sau khi gặp một đối tượng tham chiếu.
- Ít nhất 1 RTT cho tất cả đối tượng tham chiếu.
Thông điệp HTTP
Thông điệp HTTP được viết bằng văn bản ASCII thông thường, do vậy người dùng có thể đọc được. Có 2 dạng thông điệp HTTP: thông điệp HTTP yêu cầu và thông điệp HTTP trả lời.
Thông điệp HTTP yêu cầu:
Hình 3. Cấu trúc chung của thông điệp HTTP yêu cầu
- Request line: dòng đầu tiên của thông điệp HTTP yêu cầu. Request line bao gồm có 3 trường như: cách thức (method), URL, phiên bản (version). Trường cách thức (method) có thể chứa các giá trị khác nhau, bao gồm GET, POST, HEAD. Phần lớn các thông điệp HTTP yêu cầu điều sử dụng phương thức GET. Các phương thức GET được sử dụng khi trình duyệt yêu cầu một đối tượng được xác định trong trường URL. Phương thức POST là những phương thức mà HTTP client sử dụng khi người dùng điền vào một biểu mẫu (form) nào đó, chẳng hạn như người dung muốn nhập một từ khóa nào đó vào google.com đề tìm kiếm thông tin. Nếu phương thức là POST thì Entity body của thông điệp yêu cầu sẽ chứa thông tin mà người dùng đã điền. Phương thức HEAD tương tự như GET, nhưng Khi server nhận được yêu cầu bằng phương thức HEAD, nó sẽ trả về thông điệp HTTP và không chứa đối tượng được yêu cầu.
- Header line: là các dòng tiếp theo.
- Sp: bao gồm các giá trị về khoảng trống.
- Blank line: bao gồm các giá trị điều khiển trở về đầu dòng, xuống hang (cr,lf).
- Entity Body (nếu có): là phần thân của thông điệp HTTP yêu cầu.
Sau đây là một ví dụ về thông điệp HTTP yêu cầu:
Hình 4. Ví dụ về thông điệp HTTP yêu cầu
Hình 9.4 giải thích và làm rõ được các thông số sau:
- GET: Trong ví dụ này, trình duyệt đang yêu cầu các đối tượng /somedir/page.html.
- Host www.hutech.edu.vn: chỉ địnhcác servermà trên đó cácđối tượng được lưu trữ.
- Connection: close trình duyệt báo cho máy chủ là nó không muốn sử dụng kết nối liên tục và muốn máy chủ đóng kết nối sau khi gửi các đối tượng được yêu cầu.
- User-agent : chỉ thị loại trình duyệt gửi yêu cầu đến server, ở đây dùng trình duyệt Mozilla/5.0.
- Accept-language (fr): chỉ thị người dùng muốn nhận được phiên bản tiếng Pháp của đối tượng chứa trên server, nếu không server sẽ gửi phiên bản mặc định của đối tượng.
Thông điệp HTTP trả lời
Thông điệp HTTP trả lời có ba phần: dòng trạng thái (status line), dòng tiêu đề (header lines), thân thông điệp (entity body). Thân (Body) là thành phần chính của thông điệp. Status line có 3 trường: phiên bản của giao thức (version), mã trạng thái (status code), trạng thái tương ứng (phrase) và các giá trị khoảng trống (sp), điều khiển trở về đầu dòng, xuống hàng (cr,lf).
Hình 5: Cấu trúc chung của một thông điệpHTTP trả lời.
Sau đây là ví dụ về thông điệp HTTP trả lời
Hình 6. Ví dụ thông điệp HTTP trả lời
Trong ví dụ hình 6, cho thấy:
- Status line thể hiện server đang sử dụng HTTP/1.1.
- Header line bao gồm:
- Connection: close báo cho client rằng server sẽ đóng kết kết TCP sau khi gửi thông điệp.
- Date: cho biết thời gian mà thông điệp HTTP trả lời được tạo và gửi bởi server. Đó là thời gian mà server lấy đối tượng từ hệ thống tập tin của nó, chèn vào thông điệp và gửi cho client.
- Server: cho biết đây là Apache Web server, tương tự như User-agent trong thông điệp yêu cầu.
- Last-Modified: cho biết thời gian đối tượng được tạo hay sửa đổi lần cuối.
- Content-Length: cho biết số bytes của đối tượng được gửi.
- Content-Type: cho biết đối tượng trong phần entity body là HTML.
- Entity body chứa đối tượng yêu trong trường hợp ví dụ trong hình 9.6 được đại diện bởi các data data data data……….
- Mã trạng thái trả lời:
Các giá trị chữ số đầu tiên của mã trang thái (status code) có 5 giá trị:
- 1xx_Thông tin: khôngđược sử dụng, chỉ dự phòngtrong tương lai.
- 2xx_Thành công: hành độngđã nhận đượcthành công và đươc chấp nhận.
- 3xx_Chuyển hướng: hành động tiếp theo phải được thực hiện để hoàn tất yêu cầu.
- 4xx_Clien lỗi: chứa cú pháp sai có thể không thực hiện được.
- 5xx_ Server lỗi: các máy server không thực hiện một yêu cầu rõ ràng đối với các yêu cầu hợp lệ.
Một vài mã trạng thái thông dụng thường gặp:
- 200 OK: Yêu cầu thành công
- 301 Moved Permanently: đối tượng yêu cầu đã được chuyển.
- 400 Bad Request: server không hiểu được thông điệp yêu cầu.
- 404 Not Found: đối tượng được yêu cầu không có trong server.
- 505 HTTP Version Not Supported: server không hỗ trợ phiên bản giao thức HTTP này.
Gói tin HTTP
Hình 7. Gói tin HTTP
Hình wireshark trên cho thấyHTTP đang sử dụng phiên bản HTTP 1.1 dùng phương thức GET.
- Có các mã trạng thái hồi đáp như:
- 200 OK
- 404 Not Found
- Địa chỉ IP nguồn: 10.0.0.36
- Địa chỉ IP đích: 192.168.3.35
- Cổng HTTP: 80
- Sử dụng phương thức TCP
- Trang web đăng nhập là (host) http://192.168.3.35 không sử dụng DNS để phân giải địa chỉ IP 192.168.3.35.
- User-agent: loại trình duyệt gửi yêu cầu đến server ở đây dùng trình duyệt Mozilla/5.0.
- Accept-language: sử dụng ngôn ngữ tiếng anh (en-us).