Cum să specificați „Vary: Accept-Encoding” în antetul .htaccess (Programare, .Htaccess, Pagespeed)

StackOverflowNewbie a intrebat.

Google PageSpeed spune că ar trebui să „Specifice un antet Vary: Accept-Encoding header” pentru JS și CSS. Cum pot face acest lucru în .htaccess?

Comentarii

    22

  • Nu sunt sigur de ce a fost închisă, doar pentru că nu implică un limbaj de programare nu înseamnă că nu are legătură cu codarea. –  > Por BlueRaja – Danny Pflughoeft.
  • @BlueRaja-DannyPflughoeft Sunt de acord, acest lucru a fost vizualizat de peste 65100 de ori, deci cred că este un subiect bine căutat, ca să nu mai spun că răspund la întrebări htaccess în fiecare zi. –  > Por Panama Jack.
  • Știu că este o reținere ca naiba, dar antetul Vary: Accept-Encoding îi va spune browserului să stocheze în cache o versiune a paginii bazată pe Content-Encoding antet. Ar trebui să vedeți stackoverflow.com/questions/1975416/… și developers.google.com/speed/docs/best-practices/… –  > Por Ismael Miguel.
  • @IsmaelMiguel de fapt va spune clientului (și, mai important, oricăror servere de cache pe drum), că fișierul diferă pentru fiecare variantă a clientuluis Accept-Encoding` request header value, mai degrabă decât fiecare Content-Encoding variantă a valorii antetului de răspuns al serverului. –  > Por aularon.
  • @BlueRaja-DannyPflughoeft Pentru că utilizatorii cu multă reputație și utilizatorii care caută reputație își construiesc reputația vânând întrebări pe care să le închidă. Frustrant că acest lucru duce atât de des la închiderea unor întrebări care nu ar trebui să fie închise. –  > Por Dan Nissenbaum.
7 răspunsuri
aularon

Bănuiesc că este menit să activezi compresia gzip pentru fișierele css și js, pentru că asta va permite clientului să primească atât conținut codificat gzip, cât și un conținut simplu.

Iată cum se face în apache2:

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

Și iată cum să adăugați fișierul Vary Accept-Encoding header: [src]

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

Adresa Vary: spune că conținutul servit pentru această adresă URL va varia în funcție de valoarea unui anumit antet de cerere. Aici se spune că va servi conținut diferit pentru clienții care spun că Accept-Encoding: gzip, deflate (un antet de cerere), decât conținutul servit clienților care nu trimit acest antet. Principalul avantaj al acestui lucru, după părerea mea, este acela de a anunța proxy-urile intermediare de cache că trebuie să aibă două versiuni diferite ale aceleiași adrese URL din cauza unei astfel de modificări.

Comentarii

  • Nu cred că este vorba despre asta. JS-ul și CSS-ul meu sunt deja comprimate. PageSpeed încă se plânge. –  > Por StackOverflowNewbie.
  • Cred că mod_deflate este ar trebui să să trimită în mod implicit antetul Vary. –  > Por Matthew Flaschen.
  • Am făcut ceea ce ați menționat mai sus. Fișierele .js tot nu sunt comprimate. –  > Por Andy N.
  • @Andy; poate că serverul tău nu are modulul „mod_deflate.c”. –  > Por aularon.
  • Apache 2.2 nu necesită secțiunea mod_headers din răspunsul de mai sus. mod_deflate face deja ceea ce aveți nevoie. httpd.apache.org/docs/2.2/mod/mod/mod_deflate.html –  > Por Ari Maniatis.
Matt D.

Mă tem că Aularon nu a furnizat destui pași pentru a finaliza procesul. Cu puțină încercare și eroare, am reușit să activez cu succes Gzipping pe serverul meu dedicat WHM.

Mai jos sunt pașii:

  • Rulați EasyApache în cadrul WHM, selectați Deflate în cadrul listei Exhaustive Options și reconstruiți serverul.

  • Odată făcut acest lucru, mergeți la Services Configuration >> Apache Configuration >> Include Editor >> Post VirtualHost Include, selectați All Versions și apoi lipiți codul mod_headers.c și mod_headers.c (enumerate mai sus în postarea lui Aularon) unul peste altul în câmpul de introducere.

  • Odată salvat, am văzut o economie de date de 75,36% în medie! Puteți efectua un test înainte și după folosind acest instrument de compresie HTTP pentru a vedea propriile rezultate: http://www.whatsmyip.org/http_compression/

Sper că acest lucru funcționează pentru voi toți!

  • Matt

Tom

Pentru a vă gzippa și fișierele de fonturi!

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

ca în:

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

user1473179

Acest lucru mă înnebunea, dar se pare că editarea lui aularon lipsea două puncte după "Vary". Deci, schimbarea "Vary Accept-Encoding" în "Vary: Accept-Encoding" a rezolvat problema pentru mine.

Aș fi comentat sub post, dar se pare că nu mă lasă.

Oricum, sper că acest lucru salvează pe cineva aceleași probleme pe care le-am avut.

Comentarii

T.Todua

Multe ore petrecute pentru a clarifica ce a fost asta. Vă rugăm să citiți această postare pentru a obține informații avansate .HTACCESS coduri și să aflați ce fac acestea.

Puteți folosi:

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

user319730

dacă cineva are nevoie de acest lucru pentru NGINX fișierul de configurare, iată fragmentul:

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

user257319

Nu este nevoie să specificați sau chiar să verificați dacă fișierul este/are compresie, îl puteți trimite la fiecare fișier, la fiecare solicitare.

Acesta le spune proxy-urilor din aval cum să se potrivească cu viitoarele anteturi de cerere pentru a decide dacă răspunsul din memoria cache poate fi utilizat în loc să solicite unul nou de la serverul de origine.

<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>
  • unset este de a remedia unele erori în găzduirea GoDaddy mai veche, opțional.