[INet]HTTP Cacheによるアプリケーション応答の加速
2051 ワード
背景:
GETが1つのアプリケーションにアクセスする場合,コンテンツは常に変化せず,次のリクエスト時に応答したコンテンツを速やかに取得し,コンテンツが変更されたときに認識できるようにする.
アプリケーション層でCacheを行うのは1つの方法ですが、依然としてBody全体に応答してクライアントにあげなければなりません.帯域幅の消費を減らすのではなく、CPU、DBの消費を減らすだけです.
HTTP Cacheはこの問題を解決し,同じ要求の2回目はバックエンドに到達せず,具体的なサポートは標準HTTPプロトコルによる.
HTTP Cacheを使用した後のリクエストフローは、このHTTP Cachingの2つのパターンの図解を見ることができます.https://tomayko.com/blog/2008/things-caches-do
ここで、HTTP Gateway Cacheとは、ClientとApplicationを完全に独立して開き、中間層に相当し、クライアント要求を受け、バックエンド応答を受信してクライアントに送信する方法です.
HTTP gateway cacheのシナリオはVarnish,Squidである.
HTTP Cacheは、キャッシュを有効にするためによく使用される4つのキャッシュヘッダを提供し、セキュリティメソッドGET、HEADのみで動作し、
Cache-Control
Expires
ETag
Last-Modified
前の2つの方法でキャッシュの有効期限を設定できます.後の2つの方法では、キャッシュが無効になったかどうかをクライアントに確認できます.
キャッシュの有効期限とキャッシュ検証を組み合わせると、最も効果的です.
LaravelでHTTP Cacheを使う
https://laravel.com/docs/6.x/responses#attaching-headers-to-responses,
第1の方法は、ResponseコンポーネントのAPIを用いて、Responseにヘッダ情報を付加することによって、ヘッダ()とwithHeaders()の2つの方法である.
2つ目の方法は、Cache Control Middlewareを使用して、ルーティングのセットにcache-control、etag、last_を迅速に設定することです.modifiedなど.
# routeMiddleware
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class
# Apply example
Route::middleware('cache.headers:private;max_age=60')
設定されたHTTP Cacheをリフレッシュする必要がない場合、他の場所でAPIのリアルタイムデータを取得したい場合、最も簡単な方法はランダムパラメータを追加することです.t=time()であり、互いに影響しない.
Symfony HTTP Cache:https://symfony.com/doc/current/http_cache.html
Symfony HTTP Cache Validation:https://symfony.com/doc/current/http_cache/validation.html
HTTP/1.1 RFC, HTTP Caches and associated header fields:https://tools.ietf.org/html/rfc7234
HTTP/1.1 RFC, HTTP Conditional Request:https://tools.ietf.org/html/rfc7234
cache-control private:https://baike.baidu.com/item/Cache-control/1885913
Link:https://www.cnblogs.com/farwish/p/12040843.html