You are on page 1of 13

GIAO THỨC HTTP

Khái niệm

■ Http (HyperText Transfer Protocol) là giao thức truyền tải siêu


văn bản, giao tiếp trên cơ sở TCP/IP, được sử dụng để phân
phối dữ liệu (các tệp HTML, các file ảnh, …) trong www dùng
để truyền tải dữ liệu giữa Web server đến các trình duyệt Web
và ngược lại. Giao thức này sử dụng cổng 80 (port 80) là chủ
yếu (ngoài ra có thể dùng cổng 8080).
Mô hình hoạt động của giao thức HTTP
■ HTTP hoạt động dựa trên mô hình Client – Server. Trong mô
hình này, các máy tính của người dùng sẽ đóng vai trò làm máy
khách (Client). Sau một thao tác nào đó của người dùng, các
máy khách sẽ gửi yêu cầu đến máy chủ (Server) và chờ đợi câu
trả lời từ những máy chủ này.
Các đặc trưng cơ bản của HTTP
■ HTTP là giao thức connectionless (kết nối không liên tục): một trình duyệt
khởi tạo một yêu cầu HTTP từ phía client 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.
■ 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.
■ 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.
Cấu trúc cơ bản
■ 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, 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.
Tiến trình của một phiên làm việc HTTP
■ HTTP client thiết lập một kết nối TCP đến server. Nếu thiết lập thành công,
client và server sẽ truyền nhận dữ liệu với nhau thông qua kết nối này, kết nối
được thiết lập còn gọi là socket interface bao gồm các thông tin: địa chỉ IP, loại
giao thức giao vận (chính là TCP), và port (mặc định là 80).
■ Sau khi kết nối thành công, client gửi một HTTP request đến server thông qua
socket interface vừa được thiết lập. Trong gói tin request sẽ chứa đường dẫn yêu
cầu (path name) là /category/internet-of-thing.
■ Server sẽ nhận và xử lý request từ client thông qua socket, sau đó đóng gói dữ
liệu tương ứng và gửi một HTTP response về cho client. Dữ liệu trả về sẽ là một
file HTML chứa các loại dữ liệu khác nhau như văn bản, hình ảnh,…
■ Server đóng kết nối TCP.
■ Client nhận được dữ liệu phản hồi từ server và đóng kết nối TCP.
HTTP request
■ Gồm 3 phần chính là: Request line, Header và Body.
■ Request line là dòng đầu tiên của gói HTTP Request, bao gồm 3 trường:
phương thức (method), đường dẫn (path – còn gọi là URL hoặc URI) và
phiên phản giao thức (HTTP version).
– Phương thức (method) có thể là: GET, POST, HEAD, PUT và
DELETE. Hai phương thức phổ biến nhất là GET và POST, phương
thức GET thường dùng để yêu cầu tài nguyên cung cấp trong trường
URL.
– Đường dẫn (path) dùng để định danh nguồn tài nguyên mà client yêu
cầu, bắt buộc phải có ít nhất là dấu “/”.
– Phiên bản giao thức (HTTP version): là phiên bản HTTP client đang
sử dụng (thường là HTTP/1.0 hoặc HTTP/1.1)
HTTP request
■ Các dòng Header: các dòng này là không bắt buộc, viết ở định dạng
“Name:Value” cho phép client gửi thêm các thông tin bổ sung về thông điệp
HTTP request và thông tin về chính client. Một số header thông dụng như:
– Accept: loại nội dung có thể nhận được từ thông điệp response. Ví dụ:
text/plain, text/html
– Accept-Encoding: các kiểu nén được chấp nhận. Ví dụ: gzip, deflate, xz, exi…
– Connection: tùy chọn điều khiển cho kết nối hiện thời. Ví dụ: Keep-Alive,
Close…
– Cookie: thông tin HTTP Cookie từ server
■ Body: là dữ liệu gửi từ client đến server trong gói tin HTTP request. Đa số các
gói tin gửi theo phương thức GET sẽ có Body trống, các phương thức như POST
hay PUT thường dùng để gửi dữ liệu nên sẽ có bao gồm dữ liệu trong trường
Body.
HTTP response message:
■ Định dạng gói tin HTTP response gồm 3 phần chính là: Status line, Header và Body.
■ Dòng Status line gồm 3 trường là phiên bản giao thức (HTTP version), mã trạng thái
(Status code) và mô tả trạng thái (Status text):
– Phiên bản giao thức (HTTP version): phiên bản của giao thức HTTP mà server
hỗ trợ, thường là HTTP/1.0 hoặc HTTP/1.1
– Mã trạng thái (Status code): mô tả trạng thái kết nối dưới dạng số, mỗi trạng thái
sẽ được biểu thị bởi một số nguyên. Ví dụ: 200, 404, 302,…
– Mô tả trạng thái (Status text): mô tả trạng thái kết nối dưới dạng văn bản một
cách ngắn gọn, giúp người dùng dễ hiểu hơn so với mã trạng thái. Ví du: 200
OK, 404 Not Found, 403 Forbiden,…
■ Các dòng Header line của gói tin response có chức năng tương tự như gói tin request,
giúp server có thể truyền thêm các thông tin bổ sung đến client dưới dạng các cặp
“Name:Value”.
■ Phần Body là nơi đóng gói dữ liệu để trả về cho client, thông thường trong duyệt
web thì dữ liệu trả về sẽ ở dưới dạng một trang HTML để trình duyệt có thể thông
dịch được và hiển thị ra cho người dùng.
Các phương thức truyền dữ liệu trên HTTP
■ 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.
■ 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 được sử dụng để gửi dữ liệu tới Server, ví dụ,
thông tin khách hàng, file tải lên, …, bởi sử dụng các mẫu HTML.
■ PUT: Tải lên một đại diện xác định của URI.
■ DELETE: Xoá tài nguyên xác định
■ CONNECT: Chuyển đổi các yêu cầu kết nối đến một tunnel TCP/IP
Tạo web server trong python
■ Máy chủ web HTTP có nhiệm vụ thực hiện chính xác
hai điều:
■ 1- Nghe các yêu cầu http đến trên một địa chỉ TCP cụ
thể (địa chỉ IP và số cổng)
■ 2- Xử lý yêu cầu và gửi phản hồi lại cho người dùng.
Tạo web server trong python
■ Các bước thực hiện:
■ import module htttp.server của Python vào trong chương trình
■ Khai báo một class kế thừa từ class BaseHTTPRequestHandler
■ Có thể khai báo phương thức do_GET() để xử lý khi có get
Request gửi lên nếu không có trang html riêng.
■ cấu hình thông số và các hành động xử lý: httpd=
socketserver.TCPServer(("", PORT), Handler) Hoặc httpd =
HTTPServer(server_address, SimpleHTTP)
■ Khởi chạy server: httpd.serve_forever()
Một số phương thức trong httplib
■ Tham khảo trên :
https://docs.python.org/3/library/http.server.html

You might also like