window.open居然404?认识Referer

项目中,遇到了一个问题,上游系统内嵌我们的网站。但是,首次打开的时候,会显示404页面。再次打开就正常了。经过一系列排查,发现是referer的问题。本文就来和大家聊下referer的一些事情

什么是Referer

Referer是一个HTTP头部,它通常由Web浏览器发送给Web服务器,表示用户是从哪个页面链接过来的。例如,如果你在A页面点击一个链接到B页面,那么B页面的服务器在接收到请求时,通常会看到一个Referer头部,指向A页面的URL。

举个例子,从百度搜索页面,跳转到掘金。抓取到referer的数据如下:

可以看出referer中,包含了

  1. 协议 :例如 http:https:
  2. 域名 :如 www.baidu.com
  3. 端口 :如果使用的是非标准端口,例如 :8080
  4. 路径 :资源的路径,例如 /link
  5. 查询参数 :URL中跟随的任何查询参数,例如 ?url=1cb97FGjEHYtDoRZvmBM8jmu-OTYixTlagDYBGnq0jK&wd=&eqid=b7e1b23800021ecc0000000265096d00

因此,referer就是表示来源。

referer有什么作用?

  1. 统计与分析 :网站经常需要对其流量来源进行跟踪和分析。通过检查 Referer 头部,网站可以得知用户是从哪个外部链接、搜索引擎或其他来源来到他们的网站的。这有助于网站所有者了解哪些来源为他们带来了最多的流量,以及用户是如何在网站内部导航的。
  2. 日志记录 :除了分析工具外,Referer 也在服务器的访问日志中记录,这可以帮助网站管理员诊断问题、跟踪错误或理解用户行为。
  3. 增强功能与用户体验 :一些网站使用 Referer 头部来调整或增强用户体验。例如,某些服务可能会基于引荐页面为用户提供特定的内容或广告。
  4. 安全与反盗链 :尽管 Referer 头部本身并不是一个安全特性,但有时它被用作一个简单的方法来试图预防所谓的"热链接"或"盗链"。例如,一个图片主机可能只允许某些引荐者的请求访问其图片,从而试图防止其他网站直接链接其资源。
  5. 网络策略决策Referer 头部可以用于决策,例如内容适配、缓存决策或其他与网络交付优化相关的策略。

我们后端代码中,就是使用了安全与反盗链,禁止了其他网站跳转。导致我们自己打开时没有问题,别人跳转过来出现了404

referer安全性

由于referer中,可能会存在用户隐私信息,不希望被暴露。所以,在进行跳转时候,需要注意做一些安全措施。

  • 源页面,增加meta,在跳转的时候,不传referer
ini 复制代码
    <meta name="referrer" content="no-referrer">
  • 源服务端,配置请求头

    服务器端设置Referrer-Policy HTTP头部。Referrer-Policy: no-referrer。但是,这样会导致整个站点不发送Referer头部。

  • js跳转设置

javascript 复制代码
var link = document.createElement('a'); 
link.href = 'https://example.com'; 
link.target = '_blank'; 
link.rel = 'noreferrer'; 
document.body.appendChild(link); 
link.click(); 
document.body.removeChild(link);

也就是,设置标签为noreferrer

bash 复制代码
<a href="https://example.com"rel="noreferrer">https://example.com</a>

说了这么多,就是由于服务端referer的限制,导致了window.open显示404。从安全的角度,也应该对referer进行限制。我们最后使用的方式是js跳转方式,使用了noreferrer

相关推荐
weixin_382395231 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__1 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.2 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~3 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华4 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子6 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅6 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni7 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学8 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端