Tình trạng hiện tại của công việc là gì khi nói đến việc có nên làm
Transfer-Encoding: gzip
hoặc một
Content-Encoding: gzip
khi tôi muốn cho phép các máy khách có băng thông hạn chế, ví dụ như báo hiệu họ sẵn sàng chấp nhận phản hồi đã nén và máy chủ có quyền quyết định cuối cùng có nén hay không .
Sau đó là những gì ví dụ như mod_deflate và IIS của Apache làm, nếu bạn để nó chăm sóc nén. Tùy thuộc vào kích thước của nội dung được nén, nó sẽ thực hiện bổ sung Transfer-Encoding: chunked
.
Nó cũng sẽ bao gồm một Vary: Accept-Encoding
, đã gợi ý về vấn đề. Content-Encoding
dường như là một phần của thực thể, vì vậy việc thay đổi Content-Encoding
số lượng đối với một sự thay đổi của thực thể, tức là một Accept-Encoding
tiêu đề khác có nghĩa là bộ đệm ẩn không thể sử dụng phiên bản đã lưu trong bộ đệm của thực thể giống hệt.
Có câu trả lời chắc chắn nào về điều này mà tôi đã bỏ qua (và điều đó không bị chôn vùi trong một tin nhắn trong một chuỗi dài trong một nhóm tin apache nào đó) không?
Ấn tượng hiện tại của tôi là:
- Chuyển-Mã hoá thực tế sẽ là cách phù hợp để thực hiện những gì chủ yếu được thực hiện với Mã hoá Nội dung bằng các ứng dụng máy chủ và máy khách hiện có
- Mã hóa nội dung, vì hàm ý ngữ nghĩa của nó, mang một số vấn đề (máy chủ nên làm gì
ETag
khi nó nén phản hồi một cách minh bạch?) - Lý do là Chicken'n'egg: Trình duyệt không hỗ trợ nó vì máy chủ không hỗ trợ vì trình duyệt không
Vì vậy, tôi giả định cách đúng sẽ là một Transfer-Encoding: gzip
(hoặc, nếu tôi bổ sung thêm phần cơ thể, nó sẽ trở thành Transfer-Encoding: gzip, chunked
). Và không có lý do gì để chạm vào Vary
hoặc ETag
bất kỳ tiêu đề nào khác trong trường hợp đó vì nó là một thứ cấp độ vận chuyển.
Hiện tại, tôi không quan tâm quá nhiều đến 'hop-by-hop'-ness Transfer-Encoding
, điều mà những người khác dường như quan tâm đầu tiên và quan trọng nhất, bởi vì proxy có thể giải nén và chuyển tiếp không nén đến máy khách. Tuy nhiên, proxy cũng có thể chuyển tiếp nó như hiện tại (được nén), nếu yêu cầu ban đầu có Accept-Encoding
tiêu đề phù hợp , trong trường hợp tất cả các trình duyệt mà tôi biết đều là tiêu đề nhất định.
Btw, vấn đề này đã tồn tại ít nhất một thập kỷ, hãy xem ví dụ: https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Bất kỳ làm rõ về điều này sẽ được đánh giá cao. Cả về những gì được coi là tuân thủ tiêu chuẩn và những gì được coi là thực tế. Ví dụ: các thư viện máy khách HTTP chỉ hỗ trợ "Mã hóa nội dung" minh bạch sẽ là một đối số chống lại tính thực tế.
Transfer-Encoding:gzip
, mặc dù dòng lệnh curl có. Để an toàn, hãy gửi cả hai, trừ khi bạn đang kết hợp chunked và gzip.