Referer字段丢失问题
来源:互联网 发布:美元指数数据下载 编辑:程序博客网 时间:2024/05/08 08:48
HTTP协议规定:
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://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.3
15.1.3 Encoding Sensitive Information in URI's
Because the source of a link might be private information or might reveal an otherwise private information source, it is strongly recommended that the user be able to select whether or not the Referer field is sent. For example, a browser client could have a toggle switch for browsing openly/anonymously, which would respectively enable/disable the sending of Referer and From information.
Clients SHOULD NOT include a Referer header field in a (non-secure) HTTP request if the referring page was transferred with a secure protocol.
Authors of services which use the HTTP protocol SHOULD NOT use GET based forms for the submission of sensitive data, because this will cause this data to be encoded in the Request-URI. Many existing servers, proxies, and user agents will log the request URI in some place where it might be visible to third parties. Servers can use POST-based form submission instead
https页面中夹杂http链接,用户访问时,referer会被丢失,导致大数据埋点采集不到数据,影响业务数据采集。
在https->http跳转中,refer是不建议被传递的,而https->https和http->https则没有这个问题。
补充下,网站可以通过设置meta头信息:
<meta content="always" name="referrer">
来让浏览器把refer带到下一个页面,但是,这是一个浏览器行为,并非标准!就是说并非所有浏览器都支持。
摘自网络:
什么是HTTP Referer
简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。Referer其实应该是英文单词Referrer,不过拼错的人太多了,所以编写标准的人也就将错就错了。
我们通过HttpWatch也可以看到每次请求的Header中,基本上都是Referer值,值就是当前界面的url
容易丢失的原因
1、IE6、7下使用window.location.href=url进行界面的跳转
一般都是在当前窗口内进行新增、修改、查看操作,也有一些是删除操作,更有极少是查询操作。
建议查询时,如果条件较少,可以用get的方式提交form。条件较多还是post方式吧,不然IE6、7的url长度又超长了
其他操作可以写一个公共的跳转方法,模仿超链接的形式在当前窗口打开。
2、IE6、7下使用window.open
同上一种情况,能使用模仿超链接(target=_blank)的形式打开,就用超链接吧,不行的话,也没办法了
3、Tab页框架打开方式
一般使用Tab页框架的,tab页的打开方式都是在父界面或顶层界面中执行js方法来控制tab页。这是Referer就成了执行js方法所在的界面,也就是父界面或顶层界面。
以下是其他场景也会丢失,从网上搜索得来,本次测试未涉及
1、鼠标拖拽打开新窗口
鼠标拖拽是现在非常流行的用户习惯,很多浏览器都内置或者可以通过插件的方式来支持鼠标拖拽式浏览。但是通过这种方式打开的页面,基本全都丢失referrer。并且,这种情况下,也无法使用window.opener的方式去获取丢失的referrer了。
2、点击Flash内部链接
点击Flash上到达另外一个网站的时候,Referrer的情况就比较杂乱了。
IE下,通过客户端Javascript的document.referrer读取到的值是空的,但是如果你使用流量监控软件看一下的话,你会发现,实际上HTTP请求中的Referer报文头却是有值的,这可能是IE实现的Bug。同时,这个值指向的是Flash文件的地址,而不是来源网页的地址。
3、HTTPS跳转到HTTP
从HTTPS的网站跳转到HTTP的网站时,浏览器是不会发送referrer的。这个各大浏览器的行为是一样的。
例如,我们在HTTPS下使用Google Reader或是Gmail的时候,点击某个链接去到另外一个网站,那么从技术上来说,这样的访问和用户直接键入网址访问是没有什么分别的。
- Referer字段丢失问题
- 关于自定义弹出新窗口Referer丢失的问题
- 解决ie的window.open的referer丢失问题。
- 解决ie的window.open的referer丢失问题。
- 解决ie的window.open的referer丢失问题。
- referer问题
- Http协议字段Referer
- 验证HTTP Referer字段
- 验证HTTP Referer字段
- 验证HTTP Referer字段
- 初识http之referer字段
- 关于referer的获取问题
- referer
- 关于request.getHeader("Referer")的问题
- 用DataGrid演示某字段为null保存xml时节点丢失的问题
- 用DataGrid演示某字段为null保存xml时节点丢失的问题
- 从别的数据库导入数据时主键和自增长字段属性丢失问题
- Hibernate连接Oracle的Date类型字段丢失时间问题(解决方案)
- CLR查找和加载程序集的方式
- 定位流、z-index属性
- 判段1000-2000之间的闰年
- 多线程求π
- map 的用法
- Referer字段丢失问题
- SDWebImage使用,图片加载和缓存
- HTML语言
- 整理的一些小知识点
- linux-3.0内核移植
- C++文件操作
- php 找回密码机制流程
- 论文笔记:Word2Vec的发展与应用
- CSS选择器优先级