1. 概要

cURL は、HTTPリクエストを送信し、レスポンスを表示するために広く使用されているLinuxツールです。 場合によっては、キャッシュを回避し、毎回サーバーから新しい応答を生成するリクエストを送信する必要があります。 これを深く掘り下げる前に、キャッシングはクライアント側(ブラウザキャッシュ)またはサーバー側(アプリケーションレベルのキャッシュまたはApacheやNGINXなどのプロキシ層でのキャッシング)のいずれかで発生する可能性があることを理解する必要があります。

cURLコマンドを使用する場合、 cURLはHTTPクライアントにすぎず、クライアント側のリクエストはキャッシュされないことに注意する必要があります。 したがって、このコマンドの使用中のキャッシュはサーバー側で発生します。 サーバー側のキャッシュをバイパスするために、送信するHTTPリクエストを微調整してみることができます。 ただし、これらは、サーバーがキャッシュを実行するように構成されている方法に基づいて機能する場合と機能しない場合があります。 これらの調整については、以下で説明します。

2. Cache-ControlHTTPヘッダーの追加

キャッシュの動作を制御するために、HTTPリクエストとレスポンスの両方で Cache-ControlHTTPヘッダーを使用できます。 このヘッダーの下にディレクティブを提供する必要があります。私たちが関心を持つ可能性のあるいくつかのディレクティブは次のとおりです。

  • no-cache :これにより、応答が返送される前に、キャッシュが元のリソースで再検証されます。
  • no-store :このリクエストへの応答はキャッシュされるべきではありません。

Cache-Control ヘッダーでcurlコマンドを使用して、必要なディレクティブを含めることができます。

$ curl -H 'Cache-Control: no-cache, no-store' http://www.example.com

サーバーは、Cache-Controlヘッダーを尊重するように構成されている場合とされていない場合があります。 したがって、このメソッドが機能するかどうかは、にHTTPリクエストを送信するサーバーまたはWebサイトによって異なります。

3. プラグマHTTPヘッダーの追加

上で説明したCache-Control HTTPヘッダーは、HTTP1.1でのみ導入されました。 HTTP 1.0 を引き続き使用するシステムとの下位互換性のために、Pragmaヘッダーを使用できます。

$ curl -H 'Pragma: no-cache' http://www.example.com

前の方法と同様に、サーバーはこのディレクティブが新しい要求を処理すると見なす場合と見なさない場合がありますが、試してみる価値があります。

4. オールドスクールウェイ:URLの変更

ほとんどのサーバー側キャッシュ(特にプロキシレイヤーで設定されるキャッシュ)は、アクセスに使用されたURLに対して生成された応答をキャッシュすることによって機能します。 したがって、応答に影響を与えない方法でURL を変更することにより、キャッシュをバイパスできます。

これを行う最も一般的な方法は、クエリパラメータまたはクエリ文字列を追加することです。これにより、意図した応答がまったく変更されないことが確実になります。 まず、URLにクエリパラメータとして文字列を追加します。

$ curl http://www.example.com/?xyzzyspoon

これは、URLに文字列を追加して初めて試すときに機能しますが、この新しいURLもキャッシュされ、後続のリクエストで新しい応答を返すのを停止します。 これを克服するために、毎回異なるURLを生成するコマンドを書くことができます。

これを行う1つの方法は、$ RANDOMシェル変数を使用することです。これは、アクセスされるたびにランダムな整数を返します。

$ curl "http://www.example.com/?$RANDOM"

リクエストが送信されるたびにURLを変更するもう1つの合理的に確実な方法は、クエリパラメータとしてタイムスタンプを使用することです。これを実現するには、dateコマンドを使用できます。

$ curl "http://www.example.com/?$(date +%s)"

5. 結論

まず、cURLコマンドはクライアント側ではキャッシュを実行せず、このコマンドの使用中に発生するキャッシュはサーバー側で発生することに注意する必要があります。 サーバー側のキャッシュをバイパスするには、Cache-ControlPragmaなどのHTTPヘッダーを適切なディレクティブで使用するか、URLのクエリパラメーターを微調整してURLを変更します。アクセスしました。

サーバー側の構成に応じて、これらの方法が機能する場合と機能しない場合があります。 クエリパラメータを微調整すると、意図した応答を変更するという追加のリスクも伴います。

したがって、サーバー側のコードと展開を制御できる場合は、サーバー側からこの問題に取り組む方が常に適切です。 それ以外の場合は、提供されているドキュメントを参照するか、アクセスしているサービスのサポートチームに連絡することができます。 これは、処理しているシステムでキャッシングがどのように機能するかを完全に確認する唯一の方法です。