首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将重定向传递给访问者?

将重定向传递给访问者?
EN

Stack Overflow用户
提问于 2019-01-23 11:35:50
回答 2查看 71关注 0票数 0

当我的worker遇到来自源的重定向时,它会跟随它并返回内容,而不是将重定向传递给访问者。有没有人知道如何强制工作人员使用从源接收到的相同重定向进行响应?

这是与代理相结合的。

新目录请求被发送到http://server.two/old-directory/,后者以301作为响应发送到/ http://server.one/proxy-path/old-directory/ -directory/。最终结果应该是访问者被发送到新目录,但是发生的情况是worker遵循重定向并在/proxy-path/old-directory/路径下提供来自/ http://server.one/proxy-path/new-directory/ -directory/的内容。

希望这是有意义的。谢谢你的见解!

EN

回答 2

Stack Overflow用户

发布于 2019-01-24 04:12:28

遵循重定向是fetch()的默认行为。您可以像这样覆盖它:

代码语言:javascript
运行
复制
fetch(url, {redirect: "manual"})

但是,您的脚本可能存在更深层次的问题。通常,传入的event.request已经设置了redirect = "manual"属性,所以如果您将event.request直接传递给fetch(),那么您将获得所需的行为。如果您看到自动跟随重定向,这表明您没有传递原始的请求对象,而且,您已经删除了原始请求的一些属性。

当人们编写如下代码时,通常会发生这种情况:

代码语言:javascript
运行
复制
// INCORRECT: Loses request properties and headers!
let newUrl = rewriteUrl(event.request.url);
event.respondWith(fetch(newUrl));

有时人们意识到这会丢失标题,所以他们会尝试添加回来,如下所示:

代码语言:javascript
运行
复制
// STILL INCORRECT: Loses request properties other than headers!
let newUrl = rewriteUrl(event.request.url);
event.respondWith(fetch(newUrl, {headers: event.request.headers}));

正确的做法是将整个request对象作为第二个参数传递给fetch(),如下所示:

代码语言:javascript
运行
复制
// CORRECT
let newUrl = rewriteUrl(event.request.url);
event.respondWith(fetch(newUrl, event.request));

这样,请求的所有属性,包括redirectmethodbody等都会被复制过来。

请注意,如果您想修改URL和headers,您需要执行两个步骤:

代码语言:javascript
运行
复制
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));

或者,您可以利用您自己创建的请求对象(与您在事件中接收的请求对象相反)是可变的:

代码语言:javascript
运行
复制
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));
票数 1
EN

Stack Overflow用户

发布于 2019-01-23 11:58:04

我想我很快就问了这个问题。基于https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch,我看到我可以将redirect: 'manual'添加到代理请求中,这将返回我期望的重定向响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54319675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档