2012-12-06 25 views
15

Tôi nghĩ đây là một tìm kiếm google đơn giản, nhưng dường như tôi sai về điều đó.Phương pháp chuẩn cho máy khách HTTP để hướng dẫn máy chủ HTTP để vô hiệu hóa phản hồi gzip là gì?

I have seen that bạn nên cung cấp:

Accept-Encoding: gzip;q=0,deflate;q=0 

trong tiêu đề yêu cầu. Tuy nhiên, bài báo đề xuất nó cũng lưu ý rằng proxy thường xuyên bỏ qua tiêu đề đó. Ngoài ra, khi tôi cung cấp nó cho nginx, nó vẫn nén cơ thể thông báo phản hồi.

http://forgetmenotes.blogspot.ca/2009/05/how-to-disable-gzip-compression-in.html

Vì vậy, làm thế nào để tôi nói với một máy chủ web để vô hiệu hóa nén vào nội dung thư trả lời?

+0

Tôi nhầm lẫn: bạn có muốn gửi chỉ thị từ khách hàng đến máy chủ, bạn có muốn một cái gì đó được đảm bảo để vượt qua bất cứ điều gì không mong muốn proxy có thể được trong cách hoặc bạn muốn các chỉ thị để nói với các máy chủ không để nén dưới bất kỳ hoàn cảnh nào? – fvu

+0

sau này ... Tôi muốn chỉ thị cho máy chủ không nén theo bất kỳ trường hợp nào – Homer6

+0

Lưu ý rằng để ngăn tất cả các lần nén bạn có thể muốn sử dụng '*; q = 0' thay vì chỉ cấm gzip và giảm phát. Điều này đang được nói, tôi thực sự nghĩ rằng nhiều máy chủ không bận tâm với các tính năng Accept-Encoding như họ cần. Ngoài ra còn có 'Accept-Encoding: identity' ... –

Trả lời

10

Bạn có muốn mã hóa bị vô hiệu hoàn toàn?
Sau đó, bỏ qua tiêu đề Chấp nhận mã hóa trong tiêu đề yêu cầu http.

Bạn có muốn nén gzip không có trong phản hồi http không?
Sau đó bỏ qua gzip từ danh sách giá trị trong tiêu đề yêu cầu http.

Bạn có muốn ưu tiên các kỹ thuật nén khác nhau mà máy chủ hỗ trợ không? sau đó sử dụng các giá trị khác nhau giữa 0 và 1 cùng với đối số q cho mỗi giá trị trong tiêu đề yêu cầu Accept-Encoding http.(Hiện tại bạn đang sử dụng giá trị mâu thuẫn và cho biết theo trọng số = 0 mà bạn không biết cách quản lý, nhưng bạn muốn phản hồi được mã hóa bằng cách nào đó)

+1

Đối với proxy để xem xét tiêu đề http Chấp nhận mã hóa cho nội dung được phân phối từ bộ nhớ cache, tiêu đề Phản hồi http trả về được sử dụng với tiêu đề yêu cầu http như Accept-Encoding làm danh sách giá trị của nó, vì vậy proxy biết bản sao được lưu trong bộ nhớ cache được phân phối thay đổi theo tiêu đề yêu cầu http. –

+2

NO NO NO. Thông số W3C (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3) R CLE RÀNG tuyên bố rằng "Nếu không có trường Accept-Encoding có trong yêu cầu, máy chủ CÓ THỂ giả định rằng khách hàng sẽ chấp nhận bất kỳ mã hóa nội dung nào. " Ngoài ra "Lưu ý: Nếu yêu cầu không bao gồm trường Accept-Encoding và nếu mã hóa nội dung" nhận dạng "không khả dụng, thì mã hóa nội dung thường được khách hàng HTTP/1.0 hiểu (ví dụ:" gzip "và" compress ") được ưa thích; " – roryhewitt

+1

https://tools.ietf.org/html/rfc2616#section-14.3 Bạn đã bỏ lỡ câu tạm thời "Trong trường hợp này, nếu" danh tính "là một trong các mã nội dung có sẵn, thì máy chủ NÊN sử dụng" nhận dạng "mã hóa nội dung, trừ khi nó có thông tin bổ sung là mã hóa nội dung khác nhau có ý nghĩa cho khách hàng", vì vậy, lưu ý chỉ là phương sách cuối cùng. Ngoài ra IETF là cơ quan kinh điển về các giao thức internet bao gồm http, và tại thời điểm câu trả lời này http1.1 là tiêu chuẩn. Đối với các trường hợp kỳ lạ và cạnh như của bạn, tôi đoán là đề cập đến liên kết như trong bình luận này là đủ. –

13

Nhiều máy chủ web bỏ qua tham số 'q'. Phiên bản nén của một tài nguyên tĩnh thường được lưu trữ và được trả về bất cứ khi nào yêu cầu chấp nhận nó. Để tránh nhận tài nguyên đã nén, hãy sử dụng

Accept-Encoding: identity 

Máy chủ không được phục vụ bạn đại diện nén tài nguyên trong trường hợp này. Cũng không nên có bất kỳ proxy nào. Đây là mã hóa được chấp nhận mặc định nếu không có mã nào được cung cấp, nhưng khách hàng của bạn có thể thêm mặc định chấp nhận gzip, do đó, việc cung cấp 'nhận dạng' rõ ràng nên thực hiện thủ thuật.

+0

Thật không may, nginx dường như không tôn trọng điều đó. Tôi vẫn nhận được nội dung trở lại gzipped. – Homer6

+1

Lưu ý rằng không có 'Accept-Encoding' không tương đương với danh tính. Các tài liệu rõ ràng nói rằng máy chủ có thể quyết định phải làm gì nếu mã hóa không được chỉ định. –

3

Tôi nghĩ mod này cho apache

http://httpd.apache.org/docs/2.2/mod/mod_deflate.html (2)

Và điều này cho Nginx

http://wiki.nginx.org/HttpGzipModule (1)

Âm thanh như những gì bạn cần tùy thuộc vào máy chủ bạn có kế hoạch để sử dụng. Phần còn lại là tùy thuộc vào bạn!

Xin lưu ý các module nginx cả cho phép tắt giải nén:

[edit] gzip 
Syntax: gzip on | off 
Default: off 
Context: http 
server 
location 
if in location 
Reference: gzip 



Enables or disables gzip compression. 

Và đối phó với proxy:

[edit] gzip_proxied 
Syntax: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ... 
Default: off 
Context: http 
server 
location 
Reference: gzip_proxied 



It allows or disallows the compression of the response for the proxy request in the dependence on the request and the response. The fact that, request proxy, is determined on the basis of line "Via" in the headers of request. In the directive it is possible to indicate simultaneously several parameters: 

off - disables compression for all proxied requests 
expired - enables compression, if the "Expires" header prevents caching 
no-cache - enables compression if "Cache-Control" header is set to "no-cache" 
no-store - enables compression if "Cache-Control" header is set to "no-store" 
private - enables compression if "Cache-Control" header is set to "private" 
no_last_modified - enables compression if "Last-Modified" isn't set 
no_etag - enables compression if there is no "ETag" header 
auth - enables compression if there is an "Authorization" header 
any - enables compression for all requests 
[edit] gzip_types 

Lời chúc tốt nhất!

Nguồn:

1) http://forum.nginx.org/read.php?11,96472,214303

2) http://httpd.apache.org/docs/2.2/mod/mod_deflate.html#inflate (Phần Output nén)

Các vấn đề liên quan