HTTP/2 サーバープッシュ
- English
- 日本語
HTTP/2 サーバープッシュでは、Fastly が事前に読み込んで、クライアントがリクエストする前に HTTP/2 準拠のクライアントにレスポンスを送信できるようにする、ルールを設定することができます。レスポンスヘッダーまたは VCL 関数を使用して HTTP/2 サーバープッシュを開始できます。
link レスポンスヘッダーによるサーバープッシュ
Fastly は、オリジンサーバーが送信したプリロードキーワードを持つ link ヘッダーを認識し、指定されたリソースをクライアントにプッシュします。例えば、この link レスポンスヘッダーは HTTP/2 プッシュをトリガーします。
link: </assets/jquery.js>; rel=preload; as=script1つの link ヘッダーで、複数の link ヘッダーと複数のアセットをサポートしています。
link: </assets/jquery.js>; rel=preload; as=script, </assets/base.css>; rel=preload; as=stylelink ヘッダーで使用される属性は、サーバーのプッシュやヘッダー自体の処理方法をコントロールできます。追加の属性を含まない場合、link ヘッダーはサーバープッシュをトリガーし、クライアントに転送されます。
link: </assets/jquery.js>; rel=preload; as=scriptnopush ディレクティブと併せて使われた場合、ヘッダーはプッシュをトリガーせず、クライアントにそのままに渡されます。
link: </assets/jquery.js>; rel=preload; as=script; nopushx-http2-push-only ディレクティブと併せて使われた場合、ヘッダーはサーバープッシュをトリガーしますが、その後削除され、クライアントには転送されません。
link: </assets/jquery.js>; rel=preload; as=script; x-http2-push-only属性は必要に応じて組み合わせることができます。
link: </assets/jquery.js>; rel=preload; as=script, </assets/base.css>; rel=preload; as=style; nopush, </assets/main.css>; rel=preload; as=style; x-http2-push-onlyリンクヘッダーと Amazon S3 バケット
Amazon Simple Storage サービス (S3) バケットをオリジンサーバーとして使用している場合、以下のようなキャッシュ設定条件を適用して link ヘッダーを使用することができます。
set beresp.http.Link = beresp.http.x-amz-meta-Link
h2.push 関数によるサーバープッシュ
サーバープッシュを h2.push VCL 関数でトリガーすることができます。プッシュされるアセットは、パラメーターとして関数に渡されます。例:
sub vcl_recv {#FASTLY recv if (fastly_info.is_h2 && req.url ~ "^/index.html") { h2.push("/assets/jquery.js"); }}この h2.push 関数は、呼び出されるとすぐにサーバープッシュをトリガーするため、サーバーレスポンスに link ヘッダーを付ける必要がなくなります。つまり、プッシュのトリガーとなったリクエストのレスポンスをサーバーから受け取る前に、アセットをクライアントにプッシュできるということであり、配信も加速されます。