如何在 Cloudflare Workers 中不丢失 301 https 重定向的引用值
Posted
技术标签:
【中文标题】如何在 Cloudflare Workers 中不丢失 301 https 重定向的引用值【英文标题】:How not to loose referer value on 301 https redirects in Cloudflare Workers 【发布时间】:2019-09-16 20:53:13 【问题描述】:我正在尝试使用 cloudflare 工作者通过 301 重定向从 HTTPS 域A 到 HTTPS 域B 传递 Ref(f)erer。
1) 用户在浏览器地址字段中输入https://domainA.com,这样的请求头被发送到服务器:
此请求随后由此类 Cloudflare 工作人员处理:
<...>
return new Response("Will Redirect",
status: 302,
statusText: 'Found',
headers:
Location: "https://domainB.com",
"Referrer-Policy": "unsafe-url"
)
<...>
此代码生成这样的 HTTP 响应:
看起来“到目前为止一切都很好” - 推荐人策略标头已设置并正在出现,但在请求/响应标头之前 Chrome 显示同一请求的“常规”信息:
据我了解,^ 是对请求/响应组合的快速总结。此推荐人政策:no-referrer-when-downgrade 行在哪里到达那里?是 Chrome 的默认请求参数还是 Chrome 默认将其添加到响应中?或者这些是 Cloudflare 的一些默认设置?我想这是我无法通过 Referrer 的潜在原因之一。
然后 302 重定向加载 domainB 并且此请求由第二个 worker 处理:
<...>
let refr = request.headers.get('Referer')
let resp = new Response(`Testing referer: $refr`)
resp.headers.set('Referrer-Policy', 'unsafe-url')
return resp
<...>
第二个请求/响应如下:
但是来自 domainB 的响应如下:
虽然我期待看到 Testinf 推荐人: domainA.com 。我将如何实现这一目标?
谢谢!
【问题讨论】:
【参考方案1】:好吧,事实证明,您无法确定是否会传递Referer,因为它完全取决于访问者的浏览器。建议的方法是在 301 重定向位置使用 domainB.com?domainid=xyz 并确保第二个域知道 xyz 代表 domainA。
【讨论】:
以上是关于如何在 Cloudflare Workers 中不丢失 301 https 重定向的引用值的主要内容,如果未能解决你的问题,请参考以下文章
如何在不增加成本情况下使用Cloudflare Cron 触发器?
如何从 Cloudflare 工作人员内部发布到 GCP PubSub 主题