http协议中Referer的作用和容易丢失的几个原因

前段时间做一个功能,利用到了Referer来做界面间数据的传递,测试期间发现Referer很容易丢失,总结一下给大家分享下。

 

什么是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的时候,点击某个链接去到另外一个网站,那么从技术上来说,这样的访问和用户直接键入网址访问是没有什么分别的。

 

 

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值