【发布时间】:2020-12-20 16:24:55
【问题描述】:
我正在开发这个简单的应用程序,它需要我在重定向之前设置自定义引用值。
假设 A 点击了我在 Facebook 上发布的链接 X。现在,如果我检查服务器中的引用值,它会显示“facebook.com”。现在,单击链接 X 后的 A 被重定向到 B 并且 B 显示引用者“facebook.com”。但我希望它在 B 中显示“mywebsite.com”而不是“facebook.com”。我怎样才能做到这一点?
请注意,我在 MDN 中阅读了有关“禁止的标头名称”的信息,但有一个名为 Hitleap 的网站,它是一个流量交换网站。他们允许用户为他们发送的流量设置自定义引用值。所以我想这是可能的。
这是我的路线:
router.get('/:id', (req, res) => {
res.set('Referer', 'https://mywebsite.com');
res.redirect('https://boomboom.com');
});
更新
我发现在设置标题的传统方法中是不可能的。所以,我一直在考虑使用以下两种方法来实现这个结果,但我不知道这是否可行。所以寻求反馈。
方法一: 所以当用户点击我的链接时,他会在重定向到最终目的地之前访问我服务器上的一个页面。我服务器上的页面只会说“重定向”。当发生这种情况时,我还将为用户设置完整的标题,包括“Referer”字段。然后重定向到实际页面。
方法二: 方法与方法 1 相同,但这次我想从客户端复制完整的标头,但在用户位于我的“重定向”页面并重定向到最终目的地时更改引用者值。
这些过程中的任何一个都是可能的吗?如果您有任何其他解决方案,请在此处分享。谢谢
【问题讨论】:
-
不可能,因为referer是由浏览器设置的,而不是服务器响应
-
您好,感谢您的回复。你的意思是他们正在产生虚假流量,这就是他们能够操纵“推荐人”的原因吗?
-
没有办法强制浏览器将
Referer设置为某个值。您可以做的是返回200而不是302,然后让页面内容自动重定向到目标站点。<meta http-equiv="refresh" ...>是一种常见的方法,但根据this 它可能不会在所有浏览器中发送Referer。那里的另一个答案建议使用 Javascript 表单提交。 -
Hitleap 等网站充当代理。他们没有返回 HTTP 重定向,而是在服务器上创建自己的请求(因此他们可以将
Referer设置为他们想要的任何内容),然后将结果返回到您的浏览器。 -
@KevinChristopherHenry 嘿,谢谢您的回复。如果您不介意,您可以提供详细的解决方案吗?我已经检查了您上面链接的页面,但那里的解决方案尚不清楚。他们只是说要进行元刷新或放置表格。我现在的代码非常简单。我没有呈现 html 页面。而
router.get('/:id',...)只是重定向到不在我的应用程序中的目标页面。
标签: node.js http redirect http-headers