HTTP là gì? (tiếp tục)
HTTP là giao thức tầng ứng dụng phi trạng thái (stateless) và nó yêu cầu một kết nối chuyển vận mạng đáng tin
cậy để trao đổi dữ liệu giữa máy khách và máy chủ. Trong thực thi HTTP, kết nối TCP/IP được sử dụng sử dụng các
cổng (ports) được biết đến nhiều (điển hình là cổng 80 nếu kết nối không được mã hóa hay cổng 443 nếu kết nối
được mã hóa)
Các thông điệp yêu cầu và trả lời qua kết nối
Dữ liệu được trao đổi qua một chuỗi các thông điệp yêu cầu – trả lời cái được trao dổi bởi kết nối chuyển vận tầng
phiên làm việc (session layer). Một máy khách HTTP ban đầu cố gắng kết nối với một máy chủ, thiết lập một kết
nối (thực và ảo). Một máy chủ HTTP(S) lắng nghe trên cổng đó chấp nhận kết nối và sau đó chờ cho thông điệp
yêu cầu của máy khách. Máy khách gửi yêu cầu của nó tới máy chủ. Khi nhận yêu cầu, máy chủ gửi trả lại một thông
điệp trả lời HTTP (header cộng một phần thân nếu nó được yêu cầu). Phần thân của thông điệp này điển hình
là tài nguyên được yêu cầu, mặc dù một thông điệp lỗi hay thông tin khác cũng có thể được trả về. Tại bất cứ
thời điểm nào (vì nhiều lí do) máy khách hay máy chủ có thể đóng kết nối. Đóng một kết nối thường được thông
báo trước bằng cách sử dụng một hay nhiều hơn một HTTP headers trong thông điệp yêu cầu/trả lời cuối cùng được
gửi bởi tới mày chủ hay khách.
Kết nối ổn định
Trong HTTP/1.0 như được thông báo trong RFC 1945, kết nối TCP/IP luôn được đóng bởi máy chủ sau khi một
câu trả lời được gửi.
Trong HTTP/1.1, một cơ chế keep – alive chính thức được giới thiệu để rằng một kết nối có thể được sử dụng lại
cho nhiều hơn một yêu cầu/trả lời. Các kết nối ổn định như vậy giảm độ trễ yêu cầu về mặt khái niệm vì máy
khách không cần thỏa thuận lại kết nối 3 cái bắt tay TCP sau khi yêu cầu đầu tiên được gửi đi. Một hiệu ứng
phụ tích cực khác là rằng, nhìn chung, kết nối trở nên nhanh hơn về thời gian vì cơ chế slow – start TCP.
HTTP/1.1 cũng thêm dòng ống HTTP (HTTP pipelining) để giảm nhiều hơn thời gian trễ khi sử dụng kết nối ổn
định bằng cách cho phép máy khách gửi nhiều yêu cầu trước khi chờ mỗi câu trả lời.
Tối ưu hóa giành nội dung
HTTP/1.0 thêm các headers để quản lí tài nguyên được nhớ bởi máy khách để cho phép các yêu cầu GET có điều kiện.
Trong thực hành, một máy chủ phải trả về toàn bộ nội dung của tài nguyên được yêu cầu chỉ nếu
thời gian last modified không được biết bởi máy khách hoặc nếu nó thay đổi từ câu trả lời đầy đủ cuối cùng
tới yêu cầu GET. Một trong các headers này, Content – Encoding được thêm vào để chỉ ra liệu nội dung được
trả về của một tài nguyên có hay không được nén.
HTTP/1.1 giới thiệu:
+ Các headers mới để quản lí tốt hơn việc giành có điều kiện tài nguyên được nhớ.
+ Mã hóa chuyển vận phân đoạn để cho phép nội dung đi thành dòng theo đoạn khối để gửi đáng tin cậy nó thậm
chí khi máy chủ không biết trước độ dài của nó (i.e vì nó được tạo động)
+ Phục vụ dải byte, nơi một máy khách có thể yêu cầu chỉ một hay nhiều hơn một bộ phận (dải bytes) của một
tài nguyên (i.e bộ phận đầu tiên, ở giữa hay cuối của toàn bộ nội dung) và máy chủ thường gửi chỉ các bộ
phận được yêu cầu. Cái này là hữu dụng để khôi phục lại một download bị gián đoạn (khi một file là lớn), khi
chỉ một phần của nội dung phải được trình bày hay thêm động vào phần đã nhìn thấy bởi một trình duyệt để
tiết kiệm thời gian, băng thông và tài nguyên hệ thống…
Phiên làm việc ứng dụng HTTP
HTTP là một giao thức phi trạng thái. Một giao thức phi trạng thái không yêu cầu máy chủ web duy trì thông
tin hay trạng thái về mỗi người dùng trong suốt quá trình nhiều yêu cầu. Một vài ứng dụng web cần quản lí
phiên làm việc người dùng, nên chúng thực thi trạng thái hay phiên làm việc phía máy chủ, sử dụng, ví dụ
HTTP cookies hay biến ẩn bên trong web form.