2012-12-06 12 views
15

Ho pensato che fosse una semplice ricerca su google, ma a quanto pare ho sbagliato su questo.Qual è il metodo canonico per un client HTTP per indicare a un server HTTP di disabilitare le risposte gzip?

ho visto che si dovrebbe fornire:

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

nelle intestazioni di richiesta. Tuttavia, l'articolo che lo ha suggerito ha anche notato che i proxy ignorano abitualmente quell'intestazione. Inoltre, quando l'ho fornito a nginx, comprimeva ancora il corpo del messaggio di risposta.

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

Allora, come faccio a dire un web server per disabilitare la compressione sul corpo del messaggio di risposta?

+0

Sono confuso: vuoi inviare una direttiva dal client al server, vuoi qualcosa che è garantito per passare attraverso qualsiasi proxy unwilling può essere nel modo o vuoi dire la direttiva per dire al server di non comprimere in qualsiasi circostanza? – fvu

+0

quest'ultimo ... Voglio la direttiva per dire al server non comprimere in qualsiasi circostanza – Homer6

+0

Si noti che per evitare che tutte le compressioni probabilmente si vorrebbe usare '*; q = 0 'al posto di gzip solo proibire e sgonfiare. Detto questo, penso davvero che molti server non si preoccupino della funzione Accept-Encoding come dovrebbero. Esiste anche la funzione Accept-Encoding: identity' ... –

risposta

10

Vuoi codifica essere disabilitato del tutto?
Quindi ignorare l'intestazione Accept-Encoding stessa all'interno delle intestazioni di richiesta http.

Desiderate solo la compressione gzip assente nella risposta http?
Quindi salta gzip dall'elenco dei valori nell'intestazione della richiesta http.

Desiderate dare la priorità alle diverse tecniche di compressione supportate dai server? quindi utilizzare valori diversi tra 0 e 1 insieme con l'argomento q per ogni valore nell'intestazione della richiesta http Accept-Encoding.(Attualmente si utilizza il valore in conflitto e che indica in peso = 0 che non si sa come ti gestire, ma si desidera risposta da codificare comunque)

+1

Affinché i proxy considerino l'intestazione http Accept-Encoding per il contenuto fornito dalla propria cache, l'intestazione Vary http Response viene utilizzata con le intestazioni di richiesta http come Accept-Encoding come elenco di valori, quindi il proxy sa che la copia cache da servire varia come quale intestazione della richiesta http. –

+2

NO NO NO. La specifica W3C (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3) dichiara CHIARAMENTE che "Se non è presente alcun campo Accept-Encoding in una richiesta, il server PU MAY presumere che il il client accetterà qualsiasi codifica del contenuto. " Inoltre "Nota: se la richiesta non include un campo Accept-Encoding e se la codifica del contenuto" identità "non è disponibile, le codifiche del contenuto sono comunemente comprese dai client HTTP/1.0 (ad esempio" gzip "e" compress ") sono preferiti; " – roryhewitt

+1

https://tools.ietf.org/html/rfc2616#section-14.3 Ti sei perso la frase provvisoria "In questo caso, se" identità "è una delle codifiche di contenuto disponibili, quindi il server DOVREBBE utilizzare" identità "codifica del contenuto, a meno che non abbia informazioni aggiuntive che una diversa codifica del contenuto è significativa per il client.", quindi la nota è l'ultima risorsa al massimo. Anche IETF è l'autorità canonica sui protocolli Internet tra cui http, e al momento di questa risposta http1.1 era la norma. Per i casi curiosi e marginali come il tuo, la mia ipotesi è menzionare il link come in questo commento dovrebbe essere sufficiente. –

13

Molti server web ignorano il parametro 'q'. La versione compressa di una risorsa statica viene spesso memorizzata nella cache e viene restituita ogni volta che la richiesta lo accetta. Per evitare di ottenere risorse compresse, utilizzare

Accept-Encoding: identity 

Il server non dovrebbe fornire una rappresentazione compressa della risorsa in questa istanza. Né dovrebbe alcun proxy. Questa è la codifica accettata di default se non viene data nessuna, ma il tuo client potrebbe aggiungere un valore predefinito che accetta gzip, quindi fornire esplicitamente 'identità' dovrebbe fare il trucco.

+0

Sfortunatamente, nginx non sembra rispettarlo. Ricevo ancora il contenuto gzip. – Homer6

+1

Si noti che no 'Accept-Encoding' non è equivalente all'identità. La documentazione dice chiaramente che il server può decidere cosa fare se la codifica non è stata specificata. –

3

Credo che questo mod per apache

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

E questo per Nginx

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

suona come quello che avete bisogno a seconda di quale server si prevede di uso. Il resto sta a voi!

Si prega di notare il modulo nginx entrambi permette l'arresto di decompressione:

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



Enables or disables gzip compression. 

e trattare con 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 

migliori auguri!

Fonti:

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

2) http://httpd.apache.org/docs/2.2/mod/mod_deflate.html#inflate (Sezione Uscita decompressione)

Problemi correlati