说我在一个浏览网站https://whateverxyz.com/index
的网站上。那我要么
https://whateverxyz.com/app1.html
的导航链接https://whateverxyz.com/app1.html
服务器能否区分请求来自A
还是B
?在app1.html
上运行的客户端JavaScript能否说明区别?
答案 0 :(得分:8)
引用您的问题:
- 服务器能否分辨出请求是来自A还是来自B的区别?
- 在app1.html上运行的客户端JavaScript能否说明区别?
在两种情况下都无法检测到差异。
怎么说我们的官方资源?
引用来自 RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1)
如果目标URI是从没有自己的URI的来源获得的(例如,从用户键盘输入的或 用户的书签/收藏夹),则用户代理必须排除 引荐来源字段或将其发送为“ about:blank”。
“引荐来源网址”字段可能会泄露有关用户请求上下文或浏览历史的信息,这是一种隐私 关注参考资源的标识符是否显示个人 信息(例如帐户名)或应该使用的资源 保持机密(例如在防火墙后面或受保护的内部) 服务)。大多数通用用户代理不发送引荐来源 引用资源是本地“文件”或“数据”时的标头字段 URI。用户代理不得在以下位置发送引荐来源标头字段: 如果收到的引荐页带有一个 安全协议。有关其他安全注意事项,请参见Section 9.4。
详细了解它:
替代解决方案
但是您可以在客户端执行某些操作。在页面https://whateverxyz.com/index
中,您可以使用JavaScript编写一个侦听器,该侦听器可检测此页面链接上的所有点击。在点击事件中,您可以在cookie
,IndexedDB
或localStorage
中编写链接URL 和时间。然后,必须在页面https://whateverxyz.com/app1.html
中阅读此信息。如果不是未定义此信息,则该信息来自链接,而在所有其他情况下,其信息来自书签(或者可能是在地址栏中输入的信息)。
查看相关问题:
答案 1 :(得分:2)
恐怕您找不到! 它只能在浏览器扩展中访问。
答案 2 :(得分:0)
您可以在页面加载JavaScript后设置查询参数。 (请使用history.pushState
,以免重新加载)。喜欢:
history.pushState({}, "", "?bookmarked")
因此,当导航来自书签时,它带有?bookmarked
参数,当它是常规导航时,您将获得不带任何参数的导航。
Working example,Code for example
编辑:如评论中所指出,这种方法存在两个问题。
?bookmarked
查询参数。?bookmarked
。 (可以按照this question的答案中指出的方法解决)