Следующие перенаправления - это поведение по умолчанию fetch()
. Вы можете изменить это как:
fetch(url, {redirect: "manual"})
Но может быть более глубокая проблема с вашим скриптом. Обычно для входящего event.request
уже установлено свойство redirect = "manual"
, поэтому, если вы передадите event.request
непосредственно в fetch()
, вы получите желаемое поведение. Если вы видите, что перенаправления выполняются автоматически, это означает, что вы не передаете исходный объект запроса и, более того, вы удалили некоторые свойства исходного запроса.
Это обычно происходит, когда люди пишут код вроде:
// INCORRECT: Loses request properties and headers!
let newUrl = rewriteUrl(event.request.url);
event.respondWith(fetch(newUrl));
Иногда люди понимают, что это теряет заголовки, поэтому они пытаются добавить их обратно как:
// STILL INCORRECT: Loses request properties other than headers!
let newUrl = rewriteUrl(event.request.url);
event.respondWith(fetch(newUrl, {headers: event.request.headers}));
Правильное состоит в том, чтобы передать весь request
объект в качестве второго параметра fetch()
, например:
// CORRECT
let newUrl = rewriteUrl(event.request.url);
event.respondWith(fetch(newUrl, event.request));
Таким образом, все свойства запроса, включая redirect
, method
, body
и т. Д., Копируются.
Обратите внимание, что если вы хотите изменить заголовки URL и , вам необходимо выполнить два шага:
let newUrl = rewriteUrl(event.request.url);
let newHeaders = rewriteHeaders(event.request.headers);
// Create a new Request object with the new headers.
let newRequest = new Request(event.request, {headers: newHeaders});
// Fetch the new URL using the new Request object.
event.respondWith(fetch(newUrl, newRequest));
В качестве альтернативы вы можете воспользоваться тем, что объект Request, который вы создали самостоятельно (в отличие от объекта, полученного вами на событии), является изменяемым:
let newUrl = rewriteUrl(event.request.url);
// Create a new Request object with modified URL.
let newRequest = new Request(newUrl, event.request);
// Modify the headers directly on this object.
newRequest.headers.set("X-Foo", "Bar");
// Forward it on.
event.respondWith(fetch(newRequest));