function fetch(request: string | Request, requestInit?: RequestInit): Promise<Response>
パラメータ名 | タイプ | 必須 | 説明 |
Request | string | Request | はい | 取得するリクエストリソースを指定します。 |
RequestInit | いいえ |
fetchを使用する際、特定のパラメータを渡すことで、よりきめ細かな制御とカスタマイズロジックを実現できます。主にEdgeOneノードキャッシュへのアクセスまたはオリジンサーバーへのアクセス、Image Processing、リダイレクトが含まれます。www.example.com)、同時にそのリクエストがエッジ関数の実行をトリガーします。このとき、そのエッジ関数内でfetch(www.example.com)リクエストを実装すると、そのリクエストはEdgeOneノードキャッシュにアクセスし、キャッシュが存在しない場合はオリジンサーバーへのアクセスを行います。fetchがEdgeOneノードのキャッシュとオリジンサーバーへのアクセスを行うには、以下の条件を満たす必要があります:fetch(request)で指定された request.url内のHOSTと、クライアントがリクエストしたURL内のHOSTは同じです。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です。以下のシナリオで問題が発生する可能性があります:Set-Cookieヘッダーを設定すると(例えば、ログイン成功後に302を返し、セッションCookieを設定する場合)、自動的にリダイレクトに従うとCookieがクライアントに正しく渡されません。/から/subdir/index.htmlにリダイレクトする場合)、ページ内のCSS/JSなどのリソースが相対パスを使用していると、自動的にリダイレクトに従うことでクライアントは元のパスに基づいてリソースを読み込むため、パスエラーが発生する可能性があります。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を参照してください。ステータスコード | リダイレクトルール |
301、302 | POSTメソッドはGETメソッドに変換されます。 |
303 | HEAD / GET以外のすべてのメソッドはGETメソッドに変換されます。 |
307、308 | 元のメソッドを保持します。 |
Locationに由来します。この応答ヘッダーがない場合、リダイレクトは行われません。Locationの値は絶対URLまたは相対URLにすることができます。詳細についてはRFC-3986: URI Referenceを参照してください。fetchを使用してリクエストを発行する場合、以下の制限があります:fetchの合計回数は64です。この制限を超えたfetchリクエストは失敗し、例外がスローされます。fetchの最大並行数は8です。この制限を超えたfetchリクエストは、実行中のいずれかのfetchがresolveされるまで、発行が遅延されます。fetchを使用してリクエストを発行する際のデフォルトのタイムアウト時間は15秒です。最大で300秒に設定できます。fetchリクエストよりも高くなります。フィードバック