【问题标题】:How do you detect if the page is a redirect using Javascript in the client side如何在客户端使用 Javascript 检测页面是否是重定向
【发布时间】:2019-09-25 20:30:46
【问题描述】:

有没有办法让我知道当前页面是来自另一个 URL 的 301 还是 302 重定向?如何获取页面之前的URL?

【问题讨论】:

  • http header 有 origin 属性
  • 用例是什么?也许还有其他解决方案。
  • @ChrisG 假设我有一个记笔记的 chrome 扩展应用程序,我使用当前 URL 作为键并将注释附加到它,以确定注释是否与此 URL 关联。现在,站点所有者决定升级他的站点并彻底更改 URL,并将所有用户重定向到这个新的 URL 模式。如何检索新 URL 和旧 URL 的笔记?
  • 只有当用户首先导航到原始 URL 时才会发生重定向。或许您可以通过chrome.webNavigation.onCommited 了解这一点?

标签: javascript http-headers


【解决方案1】:

简短的回答,不,您无法分辨重定向的类型。

你可以查看 JavaScript 中的 Referer 标头:

https://www.w3schools.com/jsref/prop_doc_referrer.asp

document.referrer

这将告诉您用户在访问您的页面之前(通常)正在与哪个页面进行交互。它不会告诉您它是否是重定向。您可以针对该页面发出 AJAX HTTP 请求,以查看是否收到 301 或 302 消息。但这不会 100% 告诉您它是否是重定向。如果您使用的是 HTTP 并且引用页面是 HTTPS,则未设置此标头。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer

【讨论】:

  • 如果有人在他的网站上禁用了推荐人怎么办?有解决办法吗?
  • 将引荐来源网址放在 HTTP 标头中是浏览器规范的一部分,但正如您所注意到的,人们可以通过多种方式禁用引荐来源网址。假设浏览器遵循该请求并且不发送referrer 标头,则无需采取任何措施来获取它。正如其他人提到的,您可以获得 Origin,但这只会告诉您服务器而不是完整的 URI。
【解决方案2】:

HTTP 标头将在那里进行 Origin 属性检查。

【讨论】:

  • Origin 只为您提供服务器,它不会为您提供可能已将您重定向到那里的页面的完整路径。
【解决方案3】:

要获取 url 使用 document.referrer

据我所知,没有检测 301 或 302 的好方法,尤其是通过 javascript。您可以查看答案here 以获得想法(但他们使用 php)。如果您知道客户端将来自哪些 url,则可以使用从 document.referrer 中获取的 url 来确定应该采取什么行动。

【讨论】:

    【解决方案4】:

    如果你控制重定向页面,你可以通过查询字符串传递信息。

    redirect.php

    <?php
    header('Location: target.html?referrer='.$_SERVER['HTTP_HOST'], true, 301);
    

    目标.html

    <html>
    <head>
      <title>target of redirection</title>
    </head>
    <body>
      <script>
        const urlParams = new URLSearchParams(window.location.search);
        const referrer = urlParams.get('referrer');
        console.warn('referrer >'+referrer+'<');
      </script>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多