質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

1回答

2204閲覧

CloudFlareでChunked encodingを避ける方法とは

sounisi5011

総合スコア697

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2015/09/19 11:23

無料のCDN、CloudFlareを利用しています。

オリジンサーバのレスポンスではContent-Lengthヘッダを指定しているにも関わらず、CloudFlareのレスポンスはTransfer-Encodingヘッダが追加されたHTTP Chunked transfer encodingに変わってしまいます。

GTmetrixのスコアを限界まで上げたいならCloudFlareを使おう - Qiita

この問題の解決策が以下のページに書いてあるようなのですが、私は英語が読めず、内容の理解ができていません。

Why is my dynamic content being sent with chunked encoding? – CloudFlare Support

このページの内容にある(と思われる)、CloudFlareでContent-Lengthヘッダによるレスポンスを送出する方法とは?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

CloudFlaireのページを読むと、

So in this case you will need to make sure you are sending HTTP 1.0 as the protocol from your web server if you specifically need the content-length header.

content-lengthのヘッダが必要なら、HTTP 1.0でWebサーバから送れ、
と書いてありますね。
事実上難しい気がします。

一応条件を整理すると、以下の1、2を満たすことのようです。

1.サーバからHTTP/1.0で返すこと。
2.以下のいずれかを満たすこと。
2-1.Which file extensions does CloudFlare cache for static content?にある拡張子にする。
2-2.PageRuleを使って、"custom caching"で"cache everything"に設定する。

2-2.の時に1が必要とは直接書いていませんが、
文脈からそう読み取りました。

また、動作上、sounisi5011さんの環境でも、
おそらく2-1.の条件は満たしているのではないかと思います。
それは、JavaScriptのHTTPのレスポンスヘッダに
+CF-Cache-Status:HIT
があり、キャッシュはされているように見えるためです。

なぜこの様な仕様にしているかの根拠として、

For version 1.1 of the HTTP protocol, the chunked transfer mechanism is considered to be always acceptable, even if not listed in the TE request header field, and when used with other transfer mechanisms, should always be applied last to the transferred data and never more than one time. (Source: wikipedia "Chunked Encoding"). 

というWikipediaの箇所を、HTTP/1.1の場合に常にchunkedで返す理由にしている様です。
この箇所は常にacceptableであると言っているだけで根拠として弱いと思いますが、
これ以上は読み取れませんでした。

投稿2015/09/19 21:44

eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sounisi5011

2015/09/20 02:26 編集

もし宜しければ、該当するWikipediaの記述についても教えていただけないでしょうか。
eripong

2015/09/20 02:40

引用した部分の日本語訳は、大体、以下の意味と思います。 「HTTP/1.1では、Transfer-Encodingヘッダが無い場合でも、 チャンク転送コーディングは常にacceptableと考えられ、 他の転送コーディングを使う際も、最後に1回だけ、 必ず適用されるべきです。」 acceptable(許容できる)のだから、常にチャンク転送エンコーディングすることにする。 と言っていると解釈しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問