.Htaccess'te "Vary: Accept-Encoding" başlığı nasıl belirtilir


81

Google PageSpeed, JS ve CSS için "Bir Vary: Accept-Encoding başlığı belirtmem gerektiğini" söylüyor. Bunu .htaccess'te nasıl yaparım?


22
Bunun neden kapatıldığından emin değilim, çünkü bir programlama dili içermiyor olması kodlamayla ilgili olmadığı anlamına gelmez.
BlueRaja - Danny Pflughoeft

@ BlueRaja-DannyPflughoeft Kabul ediyorum, bu 65100'den fazla kez görüntülendi, bu yüzden her gün htaccess sorularını yanıtladığımdan bahsetmiyorum bile iyi aranmış bir konu olduğunu düşünüyorum.
Panama Jack

Bunun cehennem kadar beklediğini biliyorum, ancak başlık Vary: Accept-Encodingtarayıcıya Content-Encodingbaşlığa dayalı olarak sayfanın bir sürümünü önbelleğe kaydetmesini söyleyecektir . Stackoverflow.com/questions/1975416/… ve developers.google.com/speed/docs/best-practices/…
Ismael Miguel

2
@IsmaelMiguel aslında istemciye (ve daha da önemlisi, yoldaki herhangi bir önbellek sunucusuna) dosyanın , sunucu yanıt başlık değerinin s her bir Content-Encodingvaryantı yerine , istemcinin Accept-Encoding` istek başlığı değerinin her bir varyantı için farklı olduğunu söyleyecektir .
aularon

@ BlueRaja-DannyPflughoeft Çünkü çok itibara sahip kullanıcılar ve itibar arayan kullanıcılar, kapatmak için soruları araştırarak itibar kazanırlar. Sık sık, olmaması gereken soruların kapanmasına neden olması sinir bozucu.
Dan Nissenbaum

Yanıtlar:


89

Sanırım bu, css ve js dosyalarınız için gzip sıkıştırmasını etkinleştirmeniz anlamına geliyor, çünkü bu, istemcinin hem gzip ile kodlanmış içeriği hem de düz bir içeriği almasını sağlayacaktır.

Apache2'de bunu şu şekilde yapabilirsiniz:

<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>

Vary Accept-EncodingÜstbilgiyi şu şekilde ekleyebilirsiniz : [src]

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

Vary:Başlık belli isteği başlık değerine göre değişir bu url için sunulan bu içeriği söyler. Burada, kendilerini Accept-Encoding: gzip, deflate(bir istek başlığı) söyleyen istemciler için, bu başlığı göndermeyen istemcilere sunulan içerikten farklı içerik sunacağını söylüyor . Bunun temel avantajı, AFAIK, ara önbelleğe alma proxy'lerinin, bu tür bir değişiklik nedeniyle aynı url'nin iki farklı sürümüne sahip olmaları gerektiğini bilmelerini sağlamaktır.


Bunun o olduğunu sanmıyorum. JS ve CSS'm zaten sıkıştırılmış. PageSpeed ​​hala şikayet ediyor.
StackOverflowNewbie 04

3
Mod_deflate'in varsayılan olarak Vary başlığını göndermesi gerektiğini düşünüyorum .
Matthew Flaschen

Yukarıda bahsettiğiniz şeyi yaptım. .Js dosyaları hala sıkıştırılmıyor.
Andy N

@Andy; belki sunucunuzda "mod_deflate.c" modülü yoktur.
aularon

3
Apache 2.2, yukarıdaki yanıtta mod_headers bölümünü gerektirmez. mod_deflate zaten ihtiyacınız olanı yapıyor. httpd.apache.org/docs/2.2/mod/mod_deflate.html
Ari Maniatis

4

Korkarım Aularon süreci tamamlamak için yeterli adım sağlamadı. Küçük bir deneme yanılma ile, özel WHM sunucumda Gzip'i başarıyla etkinleştirmeyi başardım.

Adımlar aşağıdadır:

  • EasyApache'yi WHM içinde çalıştırın, Kapsamlı Seçenekler listesinde Söndür'ü seçin ve sunucuyu yeniden oluşturun.

  • Tamamlandığında, Servis Yapılandırması >> Apache Yapılandırması >> Düzenleyiciyi Dahil Et >> Sanal Ana Bilgisayar Dahil Etme Gönder seçeneğine gidin, Tüm Sürümleri seçin ve ardından mod_headers.c ve mod_headers.c kodunu (yukarıda Aularon gönderisinde listelenmiştir) içinde diğerinin üstüne yapıştırın. giriş alanı.

  • Kaydedildikten sonra, ortalama olarak% 75,36 veri tasarrufu görüyordum! Kendi sonuçlarınızı görmek için bu HTTP Sıkıştırma aracını kullanarak bir öncesi ve sonrası testi çalıştırabilirsiniz: http://www.whatsmyip.org/http_compression/

Umarım bu hepiniz için çalışır!

  • Mat

3

Yazı tipi dosyalarınızı da gzip'lemek için!

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

de olduğu gibi:

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

2

Bunun ne olduğunu açıklığa kavuşturmak için saatler harcadı. Gelişmiş kodları almak ve ne yaptıklarını öğrenmek için lütfen bu yazıyı okuyun .HTACCESS.

Kullanabilirsiniz:

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

1

Bu beni çıldırtıyordu, ama görünüşe göre aularon'un düzenlemesi sonrasında iki nokta üst üste eksikti "Vary". Yani değişen "Vary Accept-Encoding"için "Vary: Accept-Encoding"benim için sabit konuya.

Yazının altına yorum yapardım ama bana izin verecek gibi görünmüyor.

Her neyse, umarım bu benim yaşadığım beladan birini kurtarır.


2
Bunun bir fark yarattığına emin misin? 2.2 dokümanlarda örneklerden hiçbiri iki nokta üst üste işaretini
Nic Cottrell

1

NGINXYapılandırma dosyası için buna ihtiyaç duyan varsa , işte snippet:

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

0

Dosyanın sıkıştırılmış olup olmadığını belirtmenize veya kontrol etmenize gerek yok, her dosyaya, her istek üzerine gönderebilirsiniz.

Aşağı akış proxy'lerine, kaynak sunucudan yeni bir yanıt istemek yerine önbelleğe alınan yanıtın kullanılıp kullanılamayacağına karar vermek için gelecekteki istek başlıklarını nasıl eşleştireceklerini söyler.

<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>
  • unsetisteğe bağlı olarak eski GoDaddy hosting bazı hataları düzeltmek etmektir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.