.htaccessで「Vary:Accept-Encoding」ヘッダーを指定する方法


81

Google PageSpeedは、JSとCSSに「Vary:Accept-Encodingヘッダーを指定する」必要があると言っています。.htaccessでこれを行うにはどうすればよいですか?


22
これが閉じられた理由はわかりません。プログラミング言語が含まれていないからといって、コーディングに関連していないわけではありません。
BlueRaja-Danny Pflughoeft 2013年

@ BlueRaja-DannyPflughoeft同意します。これは65100回以上閲覧されているので、毎日htaccessの質問に答えるのは言うまでもなく、よく検索されたトピックだと思います。
パナマジャック

私はこれが地獄として保持されていることを知っていますが、ヘッダーVary: Accept-EncodingはブラウザにContent-Encodingヘッダーに基づいてページのバージョンをキャッシュに保存するように指示します。stackoverflow.com/questions/1975416/…およびdevelopers.google.com/speed/docs/best-practices/…
Ismael Miguel

2
@IsmaelMiguelは、実際には、サーバーの応答ヘッダー値のバリアントs ごとではなく、クライアントのAccept-Encoding`要求ヘッダー値のバリアントごとにファイルが異なることをクライアント(さらに重要なのは、途中のキャッシュサーバー)に通知しContent-Encodingます。
aularon 2014

@ BlueRaja-DannyPflughoeft評判の高いユーザーや評判を求めるユーザーは、質問を探して閉じることで評判を築くためです。それが頻繁に閉じられるべきではない質問につながることを苛立たせます。
ダンニッセンバウム2017年

回答:


89

これは、cssファイルとjsファイルに対してgzip圧縮を有効にすることを意味していると思います。これにより、クライアントはgzipでエンコードされたコンテンツとプレーンコンテンツの両方を受信できるようになります。

これは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>

そして、Vary Accept-Encodingヘッダーを追加する方法は次のとおりです。[src]

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

Vary:ヘッダは、このURLの配信コンテンツは、特定のリクエストヘッダの値に応じて変化することを伝えます。ここでは、Accept-Encoding: gzip, deflateこのヘッダーを送信しないクライアントに提供されるコンテンツとは異なるコンテンツ(要求ヘッダー)を提供することを示しています。これの主な利点であるAFAIKは、そのような変更のために、中間キャッシングプロキシに同じURLの2つの異なるバージョンが必要であることを通知することです。


これではないと思います。私のJSとCSSはすでに圧縮されています。PageSpeedはまだ不平を言っています。
stackOverflowNewbie 2010

3
mod_deflateはデフォルトでVaryヘッダーを送信することになっている思います。
Matthew Flaschen 2010

私はあなたが上で述べたことをしました。.jsファイルはまだ圧縮されていません。
アンディN

@アンディ; サーバーに「mod_deflate.c」モジュールがない可能性があります。
aularon 2011年

3
Apache 2.2は、上記の回答のmod_headersセクションを必要としません。mod_deflateはすでに必要なことを実行します。httpd.apache.org/docs/2.2/mod/mod_deflate.html
Ari Maniatis

4

Aularonがプロセスを完了するのに十分な手順を提供しなかったのではないかと思います。少し試行錯誤して、専用のWHMサーバーでGzippingを正常に有効にすることができました。

手順は次のとおりです。

  • WHM内でEasyApacheを実行し、[Exhaustive Options]リストで[Deflate]を選択して、サーバーを再構築します。

  • 完了したら、[サービス構成] >> [Apache構成] >> [エディターを含める] >> [VirtualHostインクルードを投稿]に移動し、[すべてのバージョン]を選択して、mod_headers.cおよびmod_headers.cコード(上記のAularonの投稿に記載)を別のコードの上に貼り付けます。入力フィールド。

  • 保存すると、平均で75.36%のデータ節約が見られました。このHTTP圧縮ツールを使用して、テストの前後に実行し、独自の結果を確認できます:http//www.whatsmyip.org/http_compression/

これが皆さんにとってうまくいくことを願っています!

  • マット

3

フォントファイルもgzipで圧縮できます。

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

のように:

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

2

それが何であるかを明らかにするために何時間も費やしました。この投稿を読んで高度な.HTACCESSコードを入手し、その機能を学んでください。

次を使用できます。

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

1

これは私を夢中にさせていましたが、aularonの編集でコロンが欠落していたようです"Vary"。だから私のために問題"Vary Accept-Encoding""Vary: Accept-Encoding"修正するために変更します。

投稿の下にコメントしたかったのですが、うまくいかないようです。

とにかく、これが私が抱えていたのと同じ問題を誰かに救うことを願っています。


2
これが違いを生むと確信していますか?2.2のドキュメントでは、どの
Nic Cottrell

1

誰かがNGINX設定ファイルのためにこれを必要とするならば、ここにスニペットがあります:

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

0

ファイルが圧縮されているかどうかを指定したり確認したりする必要はありません。すべてのファイルに、すべての要求に応じて送信できます。

これは、オリジンサーバーから新しい応答を要求するのではなく、キャッシュされた応答を使用できるかどうかを判断するために、将来の要求ヘッダーを照合する方法をダウンストリームプロキシに指示します。

<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必要に応じて、古いGoDaddyのホスティングにいくつかのバグを修正することです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.