2017-06-28 13 views
1

FirefoxまたはChromeでHTTPヘッダーをチェックすると、結果は常にContent-Encoding:gzipで表示されます。しかし、代わりに「転送コード化:チャンク」と表示され、リクエストはgzipされていないと報告している顧客があります。CSSはなぜ必ずしもgzipされていませんか?

http://www.example.com/public/css/style.min.css

Iまたは顧客がgzip圧縮を行う場合は、オンラインでチェック、それが確認されていますGZIPが有効です。

https://checkgzipcompression.com = gzip!

しかし、私はこのようなチェッカーを使用する場合。 http://onlinecurl.com/

私はまた、転送エンコーディングを取得:

要求チャンク:

GET /style/css.css HTTP/1.1 
Host: www.example.com 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
User-Agent: ... 
Accept:/
Referer: http://www.example.com/ 
Accept-Encoding: gzip, deflate 
Accept-Language: ... 
Cookie: ... 

は応答:それは、これが私である必要があるとき

HTTP/1.1 200 OK 
Age: 532948 
cache-control: public, max-age=604800 
Content-Type: text/css 
Date: Wed, 28 Jun 2017 12:35:07 GMT 
ETag: "5349e8d595dfd21:0" 
Last-Modified: Wed, 07 Jun 2017 13:56:17 GMT 
Server: Microsoft-IIS/7.5 
Vary: X-UA,Accept-Encoding, User-Agent 
X-Cache: HIT 
X-Cache-Hits: 6327 
X-CacheReason: Static-js-css. 
X-Powered-By: ASP.NET 
X-Served-By: ip-xxx-xxx-xxx-xx.name.xxx 
x-stale: true 
X-UA-Device: pc 
X-Varnish: 993020034 905795837 
X-Varnish-beresp-grace: 43200.000 
X-Varnish-beresp-status: 200 
X-Varnish-beresp-ttl: 604800.000 
transfer-encoding: chunked 
Connection: keep-alive 

なぜ一部の要求は、gzipで圧縮されていませんワニス設定(gzipに関連する部分):

if (req.http.Accept-Encoding) { 
    if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|flv|swf)$") { 
    # No point in compressing these 
    remove req.http.Accept-Encoding; 
    } elsif (req.http.Accept-Encoding ~ "gzip") { 
    set req.http.Accept-Encoding = "gzip"; 
} elsif (req.http.Accept-Encoding ~ "deflate") { 
    set req.http.Accept-Encoding = "deflate"; 
    } else { 
    # unkown algorithm 
    remove req.http.Accept-Encoding; 
    } 
} 

# Enabling GZIP 
if (beresp.http.Content-Type ~ "(text/css|application/x-javascript|application/javascript)") { 
    set beresp.do_gzip = true; 
} 


if (beresp.http.Content-Encoding ~ "gzip") { 
    if (beresp.http.Content-Length == "0") { 
    unset beresp.http.Content-Encoding; 
    } 
} 

set beresp.http.Vary = regsub(beresp.http.Vary, "(?i)^(.*?)X-Forwarded-URI,?(.*)$", "\1\2"); 
set beresp.http.Vary = regsub(beresp.http.Vary, "(?i)^(.*?)User-Agent,?(.*)$", "\1\2"); 
set beresp.http.Vary = regsub(beresp.http.Vary, "^(.*?),?$", "X-UA,\1"); 
set beresp.http.Vary = regsub(beresp.http.Vary, "^(.*?),?$", "\1"); 

ご意見ありがとうございます。

答えて

2

応答は、gzipped応答を受け入れることが要求された場合にのみgzipされます。これは、要求内のAccept-Encodingヘッダーで示されます。だからおそらくあなたのオンラインcurlはそのヘッダーを送信していません。これを見ているあなたのクライアントのために同じかもしれません。あなたは本当にgzipされた応答を得ていないと報告している顧客を持っていますか?

更新

ああ、私はあなたが今やっているものを参照してください。最近のバージョンのVarnishを使用していますか?これをすべて自分で行う必要はありません。ワニスはすべてそれをネイティブに扱います。必要なのはコンテンツタイプにdo_gziponと設定し、Accept-Encodingヘッダーを含めて、ワニスが残りを処理します。 the documentation hereを参照してください。

だから直接# Enabling GZIPの下の部分を除いて、あなたのgzip /エンコーディング関連のすべてのコードを削除します。

# Enabling GZIP 
if (beresp.http.Content-Type ~ "(text/css|application/x-javascript|application/javascript)") { 
    set beresp.do_gzip = true; 
} 

そして、それはおそらく、すべてが働いてしまいます。私にとってはうまくいきます。最高のVCL量は可能な限り少なく、ワニスは物事そのものを処理するのに非常に優れています。変更を加えた後、ワニスを再起動するか、このサイトのキャッシュをクリアすることを忘れないでください。

場合、それは便利ですが、私はこのために、次のVCLを使用します。

if (
    beresp.status == 200 
    && beresp.http.content-type ~ "\b((text/(html|plain|css|javascript|xml|xsl))|(application/(javascript|xml|xhtml\+xml)))\b" 
) { 
    set beresp.do_gzip = true; 
} 

HTMLなどの圧縮の恩恵を受けることができ、より多くのコンテンツタイプ、のためにチェックします。古くて使われていないので、私はapplication/x-javascriptと気にしません。

Varyヘッダーを修正する必要がありますか?

+0

私の要求にはAccept-Encoding:gzip、deflateが含まれていますが、応答はまだgzipされておらず、Transfer-Encoding:chunked – steffanjj

+0

です。あなたのVCLをすべて投稿するのが最善だと思います。 – SuperDuperApps

+0

gzipに関連する部分のポストを更新しました。完全なVCLが必要な場合はお知らせください。ありがとうございました。 – steffanjj

関連する問題