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).
0 comments:
Post a Comment