Kết nối trên mạng có nghĩa là gì: Đóng ý nghĩa khi được sử dụng trong thông điệp phản hồi?


30

Khi máy khách sử dụng Connection: closetiêu đề trong thông báo yêu cầu, điều này có nghĩa là nó muốn máy chủ đóng kết nối sau khi gửi tin nhắn phản hồi.

Tôi nghĩ rằng tiêu đề này chỉ được sử dụng trong các thông báo yêu cầu, nhưng tôi đã nhận thấy rằng nó cũng được sử dụng trong các thông điệp phản hồi. Ví dụ:

nhập mô tả hình ảnh ở đây

Tiêu đề này có nghĩa là gì khi được sử dụng trong thông điệp phản hồi?

Tôi nghĩ rằng điều đó có nghĩa là máy chủ sẽ đóng kết nối sau khi gửi phản hồi tin nhắn (ngay cả khi máy khách đã sử dụng Connection: keep-alivetiêu đề trong tin nhắn yêu cầu của nó). Tôi có đúng không?

Câu trả lời:


28

Vâng cái này đúng rồi. Máy chủ chỉ có thể nói "Tôi không hỗ trợ yêu cầu duy trì của bạn và sẽ chỉ đóng kết nối khi tôi kết thúc".

Từ RFC 2616, Mục 14.10:

HTTP / 1.1 xác định tùy chọn kết nối "đóng" để người gửi
báo hiệu rằng kết nối sẽ bị đóng sau khi hoàn thành
phản hồi. Ví dụ,

   Connection: close

trong trường yêu cầu hoặc trường tiêu đề phản hồi chỉ ra rằng kết nối KHÔNG NÊN được coi là 'liên tục' (phần 8.1)
sau khi yêu cầu / phản hồi hiện tại hoàn tất.

Các ứng dụng HTTP / 1.1 không hỗ trợ các kết nối liên tục PHẢI bao gồm tùy chọn kết nối "đóng" trong mỗi tin nhắn.


3
Đó là IMO kỳ lạ, tại sao phải nói rằng kết nối sẽ bị đóng, nếu máy chủ có thể đơn giản đóng nó? Không nên khách hàng sau đó chỉ thấy rằng kết nối đã bị đóng bởi máy chủ. Bất cứ ý tưởng nào là điểm trong tiêu đề này? Tôi không thấy bất kỳ giá trị ở đây.
Pavel P

1
@Pavel Ứng dụng web bao gồm tiêu đề http "Kết nối: đóng" trong phản hồi trong trường hợp muốn thông báo cho bộ cân bằng tải phía trước để đóng kết nối duy trì trong trường hợp bộ cân bằng tải đang sử dụng.
Basil A

1
@BasilA để cân bằng tải đóng kết nối với máy chủ hoặc máy khách? Bộ cân bằng tải IMO có thể thấy rằng kết nối đã được đóng bởi máy chủ và sẽ biết rằng không cần đọc bất kỳ tiêu đề nào. Ngoài ra điều ngược lại là đúng: máy chủ có thể đóng kết nối mà không cần Connection: closetiêu đề
Pavel P

@Pavel Trình cân bằng tải thường nhận được nhiều kết nối từ nhiều máy khách và sử dụng cùng một kết nối với phụ trợ bằng cách sử dụng ghép kênh thông qua kết nối duy trì. Khi một số phụ trợ có thể không muốn là một phần của ghép kênh này, phản hồi http phụ trợ phải bao gồm "Kết nối: đóng" để thông báo cho bộ cân bằng tải để đóng kết nối và dừng ghép kênh. Điều này được mô tả chi tiết trong Hướng dẫn cân bằng tải AWS (Cuộn xuống 'Kết nối HTTP') docs.aws.amazon.com/elasticloadbalANCE/latest/userguide/
Basil A

2
@BasilA Hình như bạn đúng. Hấp dẫn. Trường tiêu đề chung kết nối cho phép người gửi chỉ định các tùy chọn mong muốn cho kết nối cụ thể đó và KHÔNG được truyền thông bởi các proxy qua các kết nối tiếp theo.
Daniel F
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.