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はパブリックネットワーク経由でオリジンサーバーへアクセスします。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(request, requestInit)を使用してImage Processingを実現する場合、fetchがEdgeOneノードキャッシュとオリジンサーバーへのアクセスを取得する条件を同時に満たす必要があります。fetchはrequestInit.eo.timeoutSettingを通じてリクエストのタイムアウト時間を設定できます。接続確立のタイムアウト時間はデフォルトで3秒、レスポンス読み取りのタイムアウト時間はデフォルトで15秒、リクエスト送信のタイムアウト時間はデフォルトで300秒です。最大で300秒に設定できます。接続確立がタイムアウトした場合、net_exception_connect_timeout例外がスローされます。レスポンス読み取りまたはリクエスト送信がタイムアウトした場合、net_exception_timeout例外がスローされます。fetch(url, {eo: {timeoutSetting: {connectTimeout: 60000, // 接続確立のタイムアウト時間、単位:ミリ秒、デフォルト値:3000readTimeout: 60000, // レスポンス読み取りのタイムアウト時間、単位:ミリ秒、デフォルト値:15000writeTimeout: 60000, // リクエスト送信のタイムアウト時間、単位:ミリ秒、デフォルト値:300000}}})
fetchは3xxリダイレクトステータスコードをサポートしています。2番目のパラメータrequestInit.redirectプロパティを使用して設定できます。リダイレクトの詳細設定については、RequestInitを参照してください。fetchのデフォルト動作は自動的にリダイレクトに従うことであり、2番目のパラメータrequestInit.redirectプロパティのデフォルト値はfollowです。以下のシナリオで問題が発生する可能性があります:Set-Cookieヘッダーを設定すると(例えば、ログイン成功後に302を返し、セッションCookieを設定する場合)、自動的にリダイレクトに従うとCookieがクライアントに正しく渡されません。/から/subdir/index.htmlにリダイレクトする場合)、ページ内のCSS/JSなどのリソースが相対パスを使用していると、自動的にリダイレクトに従うことでクライアントは元のパスに基づいてリソースを読み込むため、パスエラーが発生する可能性があります。redirectパラメータをmanualに設定してください。エッジ関数はリダイレクト応答をクライアントに直接返し、クライアントがリダイレクトを実行します。const response = await fetch(url, { redirect: 'manual' });
ステータスコード | リダイレクトルール |
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を使用する場合、接続確立のタイムアウト時間はデフォルトで3秒、レスポンス読み取りのタイムアウト時間はデフォルトで15秒、リクエスト送信のタイムアウト時間はデフォルトで300秒です。最大で300秒に設定できます。fetchリクエストよりも高くなります。フィードバック