重定向前在 Express 应用程序中设置自定义引荐来源网址

Setting custom referer in Express app before redirecting

我正在开发这个简单的应用程序,它要求我在重定向之前设置自定义引用值。

假设 A 点击了我在 Facebook 上发布的 link X。现在,如果我检查服务器中的 referer 值,则会显示 'facebook.com'。现在 A 在点击 link X 后被重定向到 B,B 显示 referer 'facebook.com'。但我希望它在 B 中显示 'mywebsite.com' 而不是 'facebook.com'。我怎样才能做到这一点?

请注意,我在 MDN 中阅读了有关 'Forbidden Header Names' 的内容,但有一个名为 Hitleap 的网站,它是一个流量交换网站。他们让用户为他们发送的流量设置自定义引用值。所以我想这是可能的。

这是我的路线:

router.get('/:id', (req, res) => {
      res.set('Referer', 'https://mywebsite.com');
      res.redirect('https://boomboom.com');
});

更新

我发现用传统方法设置 header 是不可能的。所以,我一直在考虑通过使用以下两种方法来实现这个结果,但我不知道这是否可行。所以寻求反馈。

方法一: 因此,当用户点击我的 link 时,他将在重定向到最终目的地之前访问我服务器上的一个页面。我服务器上的页面只会说“重定向”。当发生这种情况时,我还将为用户设置完整的 header,包括“Referer”字段。然后重定向到实际页面。

方法二: 与方法 1 相同的方法,但这次我想从客户端复制完整的 header,但当用户在我的“重定向”页面中并重定向到最终目的地时更改引用值。

这些过程中的任何一个都是可能的吗?如果您有任何其他解决方案,请在此处分享。谢谢

Referer headers in the HTTP protocol 从浏览器到服务器,而不是其他方向。如果您的服务器向浏览器发送一个,浏览器将忽略它。

标准的商业浏览器很难从浏览器 Javascript 中弄乱 Referer header 的值。因为 cybercreeps。您的计划可能会被某些网站视为 cross-site request forgery attack 的尝试。所以仔细考虑你的目标。

您可以从您的网站提供一个页面,使您的用户的浏览器立即重定向到所需的网站。像这样的页面可能会为您解决问题。这意味着从 URL https://example.com.

0 秒后刷新当前页面

在刷新过程中,title 标签将 browser-tab 标题设置为“正在重定向...”。我发现这在 single-signon 重定向中很有用。它让用户知道即将发生的事情。

<html>
  <head> 
    <meta http-equiv="Refresh" content="0; URL=https://example.com/">
    <title>Redirecting...</title>
  </head>
</html>

如果没有设置正确的 Referer(可能并非在所有浏览器中都如此),您可以使用一些 Javascript 来加载不可见的表单,然后立即提交。

这个小页面可能会为您做到:

<html>
   <head>
      <title>Redirecting...</title>
   </head>
   <body>
    <form method="GET" action="https://example.com/">
    </form> 
    <script>
       window.onload = function(){{
          document.forms[0].submit()
       }}
    </script>
  </body>
</html>

如果您的用户禁用浏览器 Javascript,则第二种方法将不起作用。但是,话又说回来,大多数网站在那种情况下都无法正常工作。

您可以使用浏览器开发工具的“网络”选项卡解决所有这些问题。每个请求显示 headers。