2010-09-04 4 views
75

Google Page Speed ​​sagt, ich soll "a Vary angeben: Accept-Encoding-Header" für JS und CSS. Wie mache ich das in .htaccess?Wie angeben "Vary: Accept-Encoding" Header in .htaccess

+22

nicht sicher, warum diese geschlossen wurde, nur weil er es nicht über eine Programmiersprache beinhalten, bedeutet nicht, ist nicht im Zusammenhang mit Codierung. –

+0

@ BlueRaja-DannyPflughoft Ich stimme zu, dies wurde über 65100 mal angesehen, also denke ich, dass es ein gut gesuchter Begriff ist, ganz zu schweigen davon, dass ich jeden Tag auf htaccess-Fragen antworte. –

+0

Ich weiß, dass dies als Hölle gehalten wird, aber der Header 'Vary: Accept-Encoding' wird den Browser anweisen, im Cache eine Version der Seite basierend auf dem 'Content-Encoding'-Header zu speichern. Sie sollten http://stackoverflow.com/questions/1975416/trying-to-understand-the-vary-http-header und https://developers.google.com/speed/docs/best-practices/caching?hl finden = sv & csw = 1 # LeverageProxyCaching –

Antwort

84

Ich denke, es ist gemeint, dass Sie gzip-Kompression für Ihre CSS und JS-Dateien ermöglichen, denn das wird den Kunden ermöglichen, sowohl gzip-kodierte Inhalte und einen einfachen Inhalt zu erhalten.

Dies ist, wie es in apache2 zu tun:

<IfModule mod_deflate.c> 
    #The following line is enough for .js and .css 
    AddOutputFilter DEFLATE js css 

    #The following line also enables compression by file content type, for the following list of Content-Type:s 
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml 

    #The following lines are to avoid bugs with some browsers 
    BrowserMatch ^Mozilla/4 gzip-only-text/html 
    BrowserMatch ^Mozilla/4\.0[678] no-gzip 
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
</IfModule> 

Und hier ist, wie die Vary Accept-Encoding Header hinzuzufügen: [src]

<IfModule mod_headers.c> 
    <FilesMatch "\.(js|css|xml|gz)$"> 
    Header append Vary: Accept-Encoding 
    </FilesMatch> 
</IfModule> 

Der Vary: Header sagt der, dass der Inhalt für diese URL serviert wird variieren je nach Wert eines bestimmten Anforderungsheaders. Hier heißt es, dass es unterschiedliche Inhalte für Kunden dienen, die sagen, sie Accept-Encoding: gzip, deflate (eine Request-Header), als der Inhalt an Kunden bedient, die nicht diesen Header senden. Der Hauptvorteil davon, AFAIK, besteht darin, Zwischencaching-Proxies wissen zu lassen, dass sie aufgrund einer solchen Änderung zwei verschiedene Versionen derselben URL benötigen.

+0

Ich glaube nicht, dass das so ist. Mein JS und CSS sind bereits komprimiert. PageSpeed ​​beschweren sich immer noch. – StackOverflowNewbie

+0

Ich habe die Antwort bearbeitet, überprüfe sie. – aularon

+3

Ich denke mod_deflate ist [angeblich] (http://httpd.apache.org/docs/2.0/mod/mod_deflate.html#proxies), um den Vary-Header standardmäßig zu senden. –

4

Ich fürchte Aularon nicht genug Schritte lieferten den Vorgang abzuschließen. Mit ein wenig Versuch und Irrtum konnte ich Gzipping erfolgreich auf meinem dedizierten WHM-Server aktivieren.

Im Folgenden sind die Schritte:

  • Run Easyapache innerhalb WHM, wählen Deflate innerhalb der erschöpfenden Liste Optionen und den Server neu zu erstellen.

  • Sobald dies erledigt ist, gehen Sie zu Dienste Konfiguration >> Apache-Konfiguration >> Editor einschließen >> Post VirtualHost Include, wählen Sie Alle Versionen, und fügen Sie dann die mod_headers.c und mod_headers.c Code (oben in Aularon Beitrag) an der Spitze auf einem anderen innerhalb des Eingabefeldes.

  • Einmal gespeichert, ich war im Durchschnitt eine 75,36% ige Dateneinsparungen zu sehen! http://www.whatsmyip.org/http_compression/

Hoffnung das funktioniert für Sie alle: Sie können mithilfe dieses HTTP-Komprimierung-Tool, um zu sehen Ihre eigenen Ergebnisse einer vor und nach dem Test durchgeführt!

  • Matt
1

Dies machte mich verrückt, aber es scheint, dass aularon der letzten Bearbeitung des Dickdarms nach "Vary" fehlt. So änderte "Vary Accept-Encoding" zu "Vary: Accept-Encoding" das Problem für mich.

Ich würde unter dem Beitrag kommentiert haben, aber es scheint nicht, wie es mir lassen wird.

Jedenfalls hoffe ich, dass dies jemand die gleichen Probleme erspart, die ich hatte.

+2

Sind Sie sicher, dass dies einen Unterschied macht? In den 2.2-Dokumenten enthält keines der Beispiele den Doppelpunkt: http://httpd.apache.org/docs/2.2/mod/mod_headers.html –

3

Um Ihre Schriftartdateien auch gzip!

add "x-font/otf x-font/ttf x-font/eot" 

wie in:

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml x-font/otf x-font/ttf x-font/eot 
0

Keine Notwendigkeit oder auch angeben, ob die Datei/komprimiert, Sie es auf jede Datei senden kann, bei jeder Anfrage.

Es erzählt Downstream-Proxies, wie zukünftige Anforderungsheader passen zu entscheiden, ob die zwischengespeicherte Antwort eher verwendet werden kann, eine frische eine vom Ursprungsserver als anfordert.

<ifModule mod_headers.c> 
    Header unset Vary 
    Header set Vary "Accept-Encoding, X-HTTP-Method-Override, X-Forwarded-For, Remote-Address, X-Real-IP, X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Server" 
</ifModule> 
  • der unset ist einige Fehler in älteren GoDaddy Hosting zu beheben, optional.
1

wenn jemand dies für NGINX Konfigurationsdatei muss hier der Code-Schnipsel:

location ~* \.(js|css|xml|gz)$ { 
    add_header Vary "Accept-Encoding"; 
    (... other headers or rules ...) 
} 
2

viele Stunden damit verbracht, um zu klären, was das war. Bitte lesen Sie this post, um die erweiterten .HTACCESS Codes zu erhalten und zu lernen, was sie tun.

können Sie verwenden:

Header append Vary "Accept-Encoding" 
#or 
Header set Vary "Accept-Encoding" 
Verwandte Themen