美文网首页
https页面内http链接跳转时的referer问题

https页面内http链接跳转时的referer问题

作者: Mracale | 来源:发表于2023-08-23 09:56 被阅读0次

    一、问题

    最近做项目,出现这样个问题,从合作方页面,通过链接跳转我们页面时,referer信息突然获取不到了。

    两边代码都没有变更,很奇怪?

    二、原因

    通过查找,最终发现,原来合作方页面升级为https,而跳转到我方页面的链接为http。简单说,就是https页面内的

    http链接。在这种情况下,referer信息是没有的,不会传递。

    三、进一步原因

    进一步查找,发现在RFC文档(https://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.3)内有这

    样一段话:

    Clients SHOULD NOT include a Referer header field in a (non-secure) HTTP request if the referring page was transferred with a secure protocol

    翻译下来:如果来源页来自于安全协议https,那么在非安全http请求时,客户端不应包含referer头部字段。

    四、解决方案

    原因明了后,那解决方案就明了了。

    方法一:升级https,链接地址改为https(同时站点也需支持https)

    方法二:https页面添加meta元数据 ,这样强制添加referer信息

    <meta content="always" name="referrer" />
    

    referer 是 HTTP 请求头部的一个字段,它包含了请求的来源页面的 URL 地址。通常情况下,当用户从一个网页链接到另一个网页时,浏览器会在请求头中发送 referer 信息,以便目标网页能够知道请求的来源。
    然而,有些浏览器或浏览器插件会限制或禁止发送 referer 信息,这可能会对某些网站或应用程序的正常功能造成影响。为了确保 referer 信息的可靠性,开发者可以在 HTML 中使用<meta content="always" name="referrer">指定浏览器总是发送 referer 信息。

    image.png

    除了指定 content 值为 always 之外,还可以指定一些其它的值,如下表所示:

    然而,有些浏览器或浏览器插件会限制或禁止发送 referer 信息,这可能会对某些网站或应用程序的正常功能造成影响。为了确保 referer 信息的可靠性,开发者可以在 HTML 中使用<meta content="always" name="referrer">指定浏览器总是发送 referer 信息。

    除了指定 content 值为 always 之外,还可以指定一些其它的值,如下表所示:

    备注:方法二中meta元数据中的name值,还可为:

    no-referrer:即不添加referer信息;

    origin:即referer信息只有schema://domain:port,即协议://域名:端口,没有路径信息;

    no-referrer-when-downgrade:当协议降级时,不发送referer信息,也就是本文描述的问题,

    现大多数浏览器默认的;

    origin-when-crossorigin:当跨域时,origin类型的referer,即只有协议://域名:端口,没有路径信息;

    unsafe-url:始终发送referer信息。

    相关文章

      网友评论

          本文标题:https页面内http链接跳转时的referer问题

          本文链接:https://www.haomeiwen.com/subject/qnrpmdtx.html