コンテンツにスキップ

フェッチ

Fetch APIは、ワーカー内でHTTPリクエストを介してリソースを非同期に取得するためのインターフェースを提供します。

構文

export default {
async scheduled(event, env, ctx) {
return await fetch("https://example.com", {
headers: {
"X-Source": "Cloudflare-Workers",
},
});
},
};
  • fetch(resource, options optional) : Promise<Response>

    • FetchはResponseへのPromiseを返します。

パラメータ

  • resource リクエスト | 文字列 | URL

  • options オプション

    • リクエストの内容と動作を定義するオブジェクト。

Accept-Encodingヘッダーの取り扱い

fetch() APIを使用してサブリクエストを行う際、サーバーが対応している場合に、サーバーが応答する圧縮形式を指定するためにAccept-Encodingヘッダーを含めることができます。

ワーカーはgzipおよびbrotli圧縮アルゴリズムの両方をサポートしています。通常、ワーカーランタイムの本番環境ではAccept-EncodingContent-Encodingヘッダーを指定する必要はありません。オリジンから取得する際にbrotliまたはgzip圧縮が自動的に要求され、クライアントにデータを返す際に応答に適用されます。これは、クライアントとオリジンサーバーの機能に依存します。

オリジンからbrotliを要求するには、ワーカーでbrotli_content_encoding互換フラグを有効にする必要があります。まもなく、この互換フラグはすべてのワーカーに対してデフォルトで有効になります。

パススルー動作

Accept-Encodingヘッダーが役立つシナリオの1つは、サーバーからクライアントへの圧縮データを通過させる場合です。Accept-Encodingにより、ワーカーは事前に解凍されることなく、サーバーから圧縮データストリームを直接受け取ることができます。圧縮応答のボディをクライアントに返す前に読み取らず、Content-Encodingヘッダーをそのまま保持しておけば、解凍されずに「パススルー」されます。これは、オリジンサーバーの前にワーカーを使用する場合や、圧縮されたメディアアセットを取得する場合に役立ちます。オリジンサーバーで使用されるのと同じ圧縮が、ワーカーが返す応答に使用されることを保証します。

コンテンツエンコーディングの変更に加えて、クライアントがサポートしていないエンコーディングを使用する応答の場合、再圧縮も必要です。たとえば、ワーカーがbrotliまたはgzipをエンコーディングとして要求し、クライアントがgzipのみをサポートしている場合、サーバーがbrotliエンコードされたデータを返すと、再圧縮が必要になります(自動的に適用されます)。この動作は、圧縮ルールに基づいて異なる場合があります。これにより、サーバー側で異なる種類のデータに対してどの圧縮を適用するかを構成できます。

export default {
async fetch(request) {
// brotliまたはgzip圧縮を受け入れる
const headers = new Headers({
'Accept-Encoding': "br, gzip"
});
let response = await fetch("https://developers.cloudflare.com", {method: "GET", headers});
// 元の応答ボディが返され、Content-Encodingヘッダーが保持されていれば、
// 同じエンコードされたデータが再圧縮されることなく返されます。
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: response.headers,
});
}
}

関連リソース