2009-03-29 14 views
6

Máy chủ HTTP sử dụng thương lượng nội dung để phân phát một mã nhận dạng URL hoặc mã hóa gzip duy nhất dựa trên tiêu đề Accept-Encoding của ứng dụng khách.Làm thế nào để HTTP proxy lưu trữ quyết định giữa việc phân phối tài nguyên nhận dạng so với mã hóa gzip?

Bây giờ, chúng tôi có bộ nhớ cache proxy giống như mực giữa khách hàng và httpd.

Nếu proxy đã lưu trong bộ nhớ cache cả mã hóa URL, làm cách nào để xác định URL nào sẽ phân phối?

Các ví dụ phi gzip (ban đầu không ăn kèm với Vary) có thể được phục vụ cho bất kỳ khách hàng, nhưng các trường hợp mã hóa (đã Vary: Accept-Encoding) chỉ có thể được gửi đến một khách hàng với giá trị Accept-Encoding tiêu đề giống hệt như đã được sử dụng trong yêu cầu ban đầu.

Ví dụ: Opera gửi "deflate, gzip, x-gzip, identity, *;q=0" nhưng IE8 gửi "gzip, deflate". Theo thông số, sau đó, bộ nhớ cache không nên chia sẻ bộ nhớ cache được mã hóa nội dung giữa hai trình duyệt. Điều này có đúng không?

Trả lời

7

Trước hết, IMHO không chính xác không gửi "Vary: Accept-Encoding" khi thực thể thực sự thay đổi theo tiêu đề đó (hoặc vắng mặt).

Điều đó đang được nói, thông số hiện tại thực sự không cho phép phân phối phản hồi được lưu vào bộ nhớ cache cho Opera, bởi vì tiêu đề Vary không khớp với các định nghĩa trong HTTPbis, Part 6, Section 2.6. Có thể đây là một lĩnh vực mà chúng tôi nên thư giãn các yêu cầu về bộ nhớ cache (bạn có thể muốn theo dõi trên IETF HTTP mailing list ...

CẬP NHẬT: chỉ ra rằng điều này đã được đánh dấu là câu hỏi mở; theo dõi vấn đề của chúng tôi cho nó, xem Issue 147

1

Julian là đúng, tất nhiên Bài học:.. Luôn gửi Vary: Accept-Encoding khi đánh hơi Accept-Encoding, không có vấn đề gì mã hóa đáp ứng

để trả lời câu hỏi của tôi, nếu bạn nhầm lẫn. để lại Vary, nếu proxy nhận được mã không được mã hóa nse (không có Vary), nó có thể chỉ đơn giản là bộ nhớ cache và trả lại điều này cho mọi yêu cầu tiếp theo (bỏ qua Accept-Encoding). Squid does this.

1

Vấn đề lớn khi rời khỏi Vary là nếu bộ nhớ cache nhận được biến thể được mã hóa mà không thay đổi thì có thể gửi yêu cầu này ngay cả khi yêu cầu mã hóa của chúng cho biết khách hàng không thể hiểu nội dung.