【问题标题】:Determine if a request was via a browser bookmark/favorite vs a link?确定请求是通过浏览器书签/收藏夹还是链接?
【发布时间】:2019-01-20 09:51:00
【问题描述】:

假设我在一个网站上查看主页https://whateverxyz.com/index。那我要么

  • (A)点击页面HTML中的导航链接到https://whateverxyz.com/app1.html
  • (B) 点击浏览器书签到https://whateverxyz.com/app1.html

服务器能否区分请求是来自A 还是B?在 app1.html 上运行的客户端 JavaScript 可以区分吗?

【问题讨论】:

    标签: javascript http browser hyperlink bookmarks


    【解决方案1】:

    您可以在使用 JavaScript 加载页面后设置查询参数。 (使用history.pushState 所以它不会重新加载)。喜欢:

    history.pushState({}, "", "?bookmarked")

    因此,当导航来自书签时,它带有?bookmarked 参数,而当它是常规导航时,您将获得它而无需任何参数。

    Working example, Code for example

    编辑:正如 cmets 中所指出的,这种方法存在两个问题。

    1. 浏览器中的 URL 栏将始终包含 ?bookmarked 查询参数。
    2. 重新加载时,服务器将获得?bookmarked,即使它不是来自书签。 (可以按照this question 的答案中指出的那样解决)

    【讨论】:

    • 不幸的是,它不起作用。它始终带有?bookmarked 参数。也许你必须阅读你的 function history.pushState in the documentation
    • 该示例在我的 chrome 中运行良好,但是我进行了更新,以便如果它是从书签加载的,它会在页面上显示。
    • 它不起作用!它总是带有?书签!您应该阅读文档。
    • 让我解释一下,'?bookmarked' 将永远存在,这不是确定它是否来自书签的方法!检查它是否来自书签的方法是通过服务器检查接收到的 URL 'it',或者通过 JS 检查'之前'添加'?bookmarked',如果已经有'?bookmarked'。请单击示例链接,您应该看到“Not From Bookmark”,现在将其添加为书签并单击书签,您现在应该看到“From Bookmark” BTW:我已经多次阅读文档,请尝试遵守堆栈溢出使命宣言。
    • 它不起作用!如果您在页面加载后添加书签,则 URL 已经带有“?bookmarked”。我想你误会了什么。
    【解决方案2】:

    引用您的问题:

    • 服务器能否区分请求是来自 A 还是来自 B?
    • 在 app1.html 上运行的客户端 JavaScript 可以区分吗?

    在这两种情况下都无法检测到差异。

    我们官方资源怎么说?

    引用自 RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1)

    如果目标 URI 是从没有自己的 URI 的源获得的(例如,来自用户键盘的输入,或 用户的书签/收藏夹),用户代理必须排除 Referer 字段或发送值为“about:blank”。

    Referer 字段有可能泄露有关用户请求上下文或浏览历史的信息,这是一种隐私 担心引用资源的标识符是否显示个人 信息(例如帐户名称)或假定的资源 保密(例如在防火墙后面或在安全的内部 服务)。大多数通用用户代理不发送Referer 当引用资源是本地“文件”或“数据”时的头字段 URI。用户代理不得在 如果接收到的引用页面带有不安全的 HTTP 请求 安全协议。有关其他安全注意事项,请参阅 Section 9.4

    了解更多信息:

    替代解决方案

    但是你可以在客户端做一些事情。在页面https://whateverxyz.com/index 中,您可以用JavaScript 编写一个侦听器来检测此页面链接上的所有点击。在点击事件中,您可以将 链接 URL时间 写入 cookieIndexedDBlocalStorage。然后在页面https://whateverxyz.com/app1.html 你必须阅读这些信息。如果此信息不是未定义的,则它来自链接,而在所有其他情况下,它来自书签(或者它可能是在地址栏中提示的,或其他)。

    查看相关问题:

    【讨论】:

      【解决方案3】:

      恐怕,你查不出来! 它只能在浏览器扩展中访问。

      【讨论】:

      • 你有证据或文件吗?
      • @jwl 好吧,不存在的东西没有文档。但是,我可能会建议您使用至少与 firefox 一起使用的WebApplication!但我确定这不是您所寻找的。​​span>
      猜你喜欢
      • 2011-03-02
      • 2018-11-27
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      相关资源
      最近更新 更多