tencent cloud

Tencent Cloud EdgeOne

Fetch

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-15 18:20:38
AI翻訳
Web APIs標準のFetch APIに基づいて設計されています。エッジ関数ランタイムはfetchを使用して非同期リクエストを発行し、リモートリソースを取得できます。

説明

function fetch(request: string | Request, requestInit?: RequestInit): Promise<Response>

パラメータ

パラメータ名
タイプ
必須
説明
Request
string | Request
はい
取得するリクエストリソースを指定します。
RequestInit
いいえ
リクエストオブジェクトの初期化設定項目です。詳細についてはRequestInitを参照してください。

高度な機能

fetchを使用する際、特定のパラメータを渡すことで、よりきめ細かな制御とカスタマイズロジックを実現できます。主にEdgeOneノードキャッシュへのアクセスまたはオリジンサーバーへのアクセス、Image Processing、リダイレクトが含まれます。

EdgeOneノードキャッシュまたはオリジンへのアクセス

クライアントがEdgeOneサイトに接続済みの加速ドメインにアクセスしたとき(例:www.example.com)、同時にそのリクエストがエッジ関数の実行をトリガーします。このとき、そのエッジ関数内でfetch(www.example.com)リクエストを実装すると、そのリクエストはEdgeOneノードキャッシュにアクセスし、キャッシュが存在しない場合はオリジンサーバーへのアクセスを行います。
説明:
fetchがEdgeOneノードのキャッシュとオリジンサーバーへのアクセスを行うには、以下の条件を満たす必要があります:
1. クライアントがEdgeOneサイトに接続済みの加速ドメインにアクセスし、同時にそのリクエストがエッジ関数の実行をトリガーします。
2. fetch(request)で指定された request.url内のHOSTと、クライアントがリクエストしたURL内のHOSTは同じです。
3. fetch(request)で指定されたrequest.headers.hostと、クライアントリクエストヘッダーのHOST値は同じです。
fetch(event.request)はEdgeOneのキャッシュとオリジンサーバーへのアクセスを取得します。
addEventListener('fetch', (event) => {
// fetch(event.request) はEdgeOne CDNのキャッシュとオリジンサーバーへのアクセスを取得します。
const response = fetch(event.request);
event.respondWith(response);
});
fetch(url)はEdgeOneのキャッシュとオリジンサーバーへのアクセスを取得します。
addEventListener('fetch', (event) => {
event.respondWith(handleEvent(event));
});

async function handleEvent(event) {
const { request } = event;
const urlInfo = new URL(request.url);
// オリジンURL書き換え
const url = `${urlInfo.origin}/h5/${urlInfo.pathname}`;
// fetch(url) はEdgeOne CDNのキャッシュとオリジンサーバーへのアクセスを取得します。
const response = await fetch(url);
return response;
}

画像処理

fetchはパラメータrequestInit.eo.imageを渡して画像の拡大縮小やフォーマット変換を行うことができます。詳細はImage Processingのパラメータ設定項目ImagePropertiesを参照してください。
fetchのデフォルト動作は自動的にリダイレクトに従うことであり、2番目のパラメータrequestInit.redirectプロパティのデフォルト値はfollowです。以下のシナリオで問題が発生する可能性があります:
1. ログイン/認証シナリオ:オリジンサーバーがリダイレクト応答でSet-Cookieヘッダーを設定すると(例えば、ログイン成功後に302を返し、セッションCookieを設定する場合)、自動的にリダイレクトに従うとCookieがクライアントに正しく渡されません。
2. 相対パスリソースの読み込み:オリジンサーバーがトップページをサブディレクトリにリダイレクトすると(例えば、/から/subdir/index.htmlにリダイレクトする場合)、ページ内のCSS/JSなどのリソースが相対パスを使用していると、自動的にリダイレクトに従うことでクライアントは元のパスに基づいてリソースを読み込むため、パスエラーが発生する可能性があります。
3. カスタムリダイレクトロジックが必要:リダイレクトの前後に特定の操作(ログ記録、リダイレクト先の変更など)を実行する必要があります。
お客様のビジネスが上記のシナリオに該当する場合は、redirectパラメータをmanualに設定してください。エッジ関数はリダイレクト応答をクライアントに直接返し、クライアントがリダイレクトを実行します。
説明:
fetch(request, requestInit)を使用してImage Processingを実現する場合、fetchがEdgeOneノードキャッシュとオリジンサーバーへのアクセスを取得する条件を同時に満たす必要があります。

タイムアウト時間の設定

fetchはrequestInit.eo.timeoutSettingを通じてリクエストのタイムアウト時間を設定できます。デフォルトのタイムアウト時間は15秒で、最大300秒に設定可能です。
fetch(url, {
eo: {
timeoutSetting: {
connectTimeout: 60000, // 接続確立のタイムアウト時間、単位:ミリ秒
readTimeout: 60000, // 応答読み取りのタイムアウト時間、単位:ミリ秒
writeTimeout: 60000, // リクエスト送信のタイムアウト時間、単位:ミリ秒
}
}
})

リダイレクト

fetchは3xxリダイレクトステータスコードをサポートしています。2番目のパラメータrequestInit.redirectプロパティを使用して設定できます。リダイレクトの詳細設定については、RequestInitを参照してください。
リダイレクトルールはWeb APIs標準のfetch APIに準拠しており、ステータスコードによって異なるフォロー規則があります:
ステータスコード
リダイレクトルール
301、302
POSTメソッドはGETメソッドに変換されます。
303
HEAD / GET以外のすべてのメソッドはGETメソッドに変換されます。
307、308
元のメソッドを保持します。
注意
リダイレクト先のアドレスは応答ヘッダーLocationに由来します。この応答ヘッダーがない場合、リダイレクトは行われません。
レスポンスヘッダーLocationの値は絶対URLまたは相対URLにすることができます。詳細についてはRFC-3986: URI Referenceを参照してください。

ランタイム制限

エッジ関数でfetchを使用してリクエストを発行する場合、以下の制限があります:
回数制限:エッジ関数の1回の実行において発行できるfetchの合計回数は64です。この制限を超えたfetchリクエストは失敗し、例外がスローされます。
並行制限:エッジ関数の1回の実行において発行できるfetchの最大並行数は8です。この制限を超えたfetchリクエストは、実行中のいずれかのfetchがresolveされるまで、発行が遅延されます。
時間制限:エッジ関数でfetchを使用してリクエストを発行する際のデフォルトのタイムアウト時間は15秒です。最大で300秒に設定できます。
注意
リダイレクトは毎回リクエスト回数にカウントされ、その優先度は新しく発行されたfetchリクエストよりも高くなります。

関連参考



ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック