Sự Khác Biệt Giữa Kết Nối HTTP Dài Hạn và WebSocket

Sự Khác Biệt Giữa Kết Nối HTTP Dài Hạn và WebSocket

Một, HTTP và WebSocket Đều Dựa Trên Giao Thức TCP

  • WebSocket là một giao thức khác biệt với HTTP.
  • Cả hai đều nằm ở tầng Ứng dụng trong mô hình OSI, và đều phụ thuộc vào giao thức TCP ở tầng truyền tải.
  • Mỗi kết nối TCP đều cần qua quá trình bắt tay ba lần.

Hai, Kết Nối Ngắn HTTP

HTTP 1.0 (kết nối ngắn) có nghĩa là trình duyệt và máy chủ mỗi khi thực hiện một thao tác HTTP sẽ thiết lập một kết nối TCP. Sau khi truyền dữ liệu hoàn tất, kết nối TCP sẽ được đóng, tức là: kết nối giữa máy khách và máy chủ đều phải bị ngắt.

Ba, Kết Nối Dài HTTP

HTTP 1.1 (kết nối dài) sử dụng kết nối bền vững, máy chủ sau khi gửi phản hồi không đóng kết nối TCP này. Các yêu cầu và phản hồi tiếp theo vẫn có thể được truyền trên cùng một kết nối TCP này.

Nếu trình duyệt hỗ trợ keep-alive, nó sẽ thêm vào trường header của yêu cầu:

Connection: Keep-Alive

Khi máy chủ nhận được yêu cầu và phản hồi, nó cũng thêm vào header HTTP trong phản hồi:

Connection: Keep-Alive

Ví dụ về phản hồi kết nối dài HTTP:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 11 Aug 2016 15:23:13 GMT
Keep-Alive: timeout=5, max=1000
Last-Modified: Mon, 25 Jul 2016 04:32:39 GMT
Server: Apache

(nội dung)

3.1 Lợi Ích

  • Giảm độ trễ cho các yêu cầu tiếp theo (không cần bắt tay lại)
  • Giảm kiểm soát tắc nghẽn (số lượng kết nối TCP giảm đi)
  • Sử dụng ít CPU và bộ nhớ hơn (do số lượng kết nối đồng thời giảm)
  • Cho phép pipeline hóa các yêu cầu và phản hồi HTTP
  • Cho phép báo lỗi mà không cần đóng kết nối TCP

3.2 Nhược Điểm

Số lượng kết nối mà máy chủ có thể thiết lập bị giới hạn bởi số cổng và số file handle. Nếu cần duy trì kết nối với máy khách trong thời gian dài, số lượng máy khách mà máy chủ có thể phục vụ đồng thời sẽ giảm.

Để giải quyết vấn đề này, thời gian hết hạn kết nối mặc định của Apache 2.0 httpd chỉ là 15 giây, trong khi phiên bản Apache 2.2 mới hơn chỉ là 5 giây. Bằng cách thiết lập thời gian hết hạn ngắn, một máy khách có thể nhanh chóng truyền nhiều thành phần trang web ngay từ đầu mà không chiếm dụng tài nguyên tiến trình hoặc cổng của máy chủ trong thời gian dài. Tuy nhiên, điều này cũng khiến khi máy khách cần khởi tạo yêu cầu mới, kết nối bền vững trước đó có thể đã bị máy chủ đóng. Điều này làm suy yếu lợi ích của việc sử dụng kết nối bền vững.

Bốn, Quá Trình Thiết Lập Kết Nối WebSocket

Việc thiết lập kết nối WebSocket cần bắt đầu bằng một yêu cầu http để bắt tay với máy chủ. Sau khi bắt tay thành công, kết nối được thiết lập và duy trì.

Một yêu cầu bắt tay WebSocket điển hình như sau:

Yêu cầu từ máy khách:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Máy chủ phản hồi:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

Giai đoạn bắt tay của WebSocket tận dụng giao thức HTTP, sau khi hoàn tất bắt tay, việc truyền tiếp vẫn diễn ra trên cùng kết nối TCP trước đó. Lúc này kết nối này sẽ không bị ngắt, và trình duyệt cùng máy chủ có thể sử dụng kết nối này để gửi tin nhắn cho nhau. Nhưng lúc này kết nối không còn là kết nối http mà đã được nâng cấp thành kết nối WebSocket. Trình duyệt và máy chủ không gửi các yêu cầu http cho nhau nữa.

Năm, Sự Khác Biệt Giữa Kết Nối HTTP Dài Hạn và WebSocket

1, Khái Niệm

  • Đơn công: Chỉ cho phép truyền dữ liệu theo một hướng, chỉ một bên có thể gửi dữ liệu, bên kia nhận dữ liệu và phản hồi. Ví dụ: HTTP
  • Bán song song: Cho phép truyền dữ liệu theo hai hướng, nhưng cùng một thời điểm, chỉ một bên có thể gửi hoặc nhận tin nhắn. Ví dụ: máy đàm công cộng
  • Toàn song song: Có thể truyền đi hai chiều cùng lúc. Ví dụ: websocket

2, Kết Nối HTTP Dài Hạn: Giao Tiếp Đơn Công

Kết nối HTTP dài vẫn dựa trên giao thức HTTP, chế độ hoạt động vẫn là hỏi một lần đáp một lần. Cụ thể là: máy khách khởi tạo một yêu cầu, máy chủ phản hồi tối đa một lần. Bản chất này không thay đổi, chỉ là trên cùng một kết nối TCP có thể thực hiện nhiều yêu cầu và nhiều phản hồi mà không cần bắt tay ba lần mỗi lần.

3, WebSocket: Giao Tiếp Toàn Song Song

Client WebSocket chỉ cần yêu cầu máy chủ một lần, sau khi kết nối được thiết lập, cả hai bên có thể gửi tin nhắn cho nhau. Điều này là HTTP không làm được, HTTP chỉ có thể máy khách chủ động gửi tin nhắn cho máy chủ, còn máy chủ chỉ có thể phản hồi tin nhắn một cách thụ động. Tất nhiên, để kiểm tra xem kết nối WebSocket còn hoạt động không, phía trước sẽ sử dụng cơ chế heartbeat, nhưng điều này không ảnh hưởng đến bản chất là sau khi kết nối được thiết lập, máy chủ có thể chủ động gửi thông tin cho máy khách.

4, Sự Khác Biệt Chính

Bản chất của kết nối HTTP dài vẫn là giao thức HTTP, chế độ hoạt động vẫn là hỏi một lần đáp một lần. Cụ thể là: máy khách chủ động khởi tạo một yêu cầu, máy chủ thụ động phản hồi một lần. Bản chất này không thay đổi. Chỉ thay đổi là trên cùng một kết nối TCP, khi máy khách gửi nhiều yêu cầu cho máy chủ không cần bắt tay ba lần lại.

WebSocket thì khác, máy khách chỉ cần yêu cầu máy chủ một lần, sau đó máy chủ có thể chủ động trả về nhiều phản hồi. Cụ thể là: sau khi kết nối được thiết lập, máy khách và máy chủ có thể gửi dữ liệu cho nhau (toàn song song). Đặc biệt là máy chủ có thể chủ động gửi thông tin cho máy khách, điều này là HTTP không làm được.

Thẻ: http WebSocket giao thức mạng Kết nối mạng Full-duplex

Đăng vào ngày 11 tháng 6 lúc 01:21