`
lwj0212
  • 浏览: 48869 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 

 

    

分享到:
评论

相关推荐

    nginx利用referer指令实现防盗链配置

    nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求,我们应该牢记。下面这篇文章主要介绍了nginx利用referer指令实现防盗链配置的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。

    javascript操作referer详细解析

    本篇文章主要是对javascript操作referer进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助

    request.getHeader("referer")防盗链

    HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器、请求页面、服务器等相关信息。Referer是HTTP头中的一个属性,告诉服务器我是从哪个页面链接过来的。

    php 伪造IP和HTTP-REFERER的方法

    php 伪造IP和HTTP-REFERER的方法,对于采集,匿名投票等很有用处

    Android CordovaWebview Add Header Referer

    本代码是处理android hybrid混合应用,遇到的webview 拦截 header referer 问题的解决。 场景:angular $HTTP 或者js的http请求或者其他。。webview成功拦截get 、post、delete请求,添加header,referer以及body ...

    php中HTTP_REFERER函数用法实例

    本文实例分析了php中HTTP_REFERER函数用法。分享给大家供大家参考。具体分析如下: 利用php的http_referer函数来判断用户的来路,这是比较简单的,实例代码如下: 复制代码 代码如下:<?php  if (isset($_SERVER[...

    完美兼容各大浏览器获取HTTP_REFERER方法总结

    后来查了一些相关资料,发现在IE 中通过 [removed].href 或者是 是无法获取HTTP_REFERER, 真是搞不懂 IE 的浏览器,很多浏览器运行的很好的东西,它就是不支持,最后没有办法,只能PHP伪造来源HTTP_REFERER的方法...

    HTTP Referer详解及Referer控制

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的

    referer-mod:Web Extension修改HTTP请求中的Referer标头

    Referer Modifier是Firefox的Web扩展,用于修改HTTP请求中的Referer标头和匹配的Javascript document.referrer属性。 对于每个目标域,可以配置以下五个操作之一: 保留:请勿修改引荐来源网址 修剪:仅发送引荐...

    IE BHO插件,修改referer

    实现了修改HTTP Header 中Referer的BHO插件

    HTTP协议详解

    它是一种通用的,无状态(stateless)的协议,除了应用于超文本传输外,它也 可以应用于诸如名称服务器和分布对象管理系统之类的系统,这可以通过扩展它的请求方法,错误代码和报头[47]来实现。HTTP的一个特点是数据...

    selenium-referer:在使用Python和WebDriver的Selenium测试中添加Referer请求标头的示例

    具有自定义Referer标头的Python Selenium测试 有时,当用户来自不同来源/搜索引擎时,网站需要具有不同的行为。 在我的用例中,我们的网站必须设置一个跟踪Cookie,该跟踪Cookie对于来自Google,AOL,Yahoo或MSN的...

    laravel-referer, 记住原始访问者引用者.zip

    laravel-referer, 记住原始访问者引用者 记得一个访问者引用者 在会话中记住访问者的原始引用者。 引用程序为( 优先优先级优先):utm_source 查询参数如果URL中存在外部主机,则来自请求头的Referer的域空白安装你...

    使用JavaScript和C#中获得referer

     * @ishost 布尔类型 Referer为空时是否返回Host(网站首页地址)  */ function get_http_referer(ishost) {  if (ishost === undefined) { ishost = true; }  if (document.referrer) {  return document....

    http协议介绍

    http协议的基本介绍,实例笔记 if(isset($_SERVER['HTTP_REFERER'])) { //取出$SERVER['HTTP_REFERER'] //判断 isset($SERVER['HTTP_REFERER'] 是不是以,本网站域名开始(http://localhost/Myphp/http/开始...

    php 伪造HTTP_REFERER页面URL来源的三种方法

    php获取当前页面的前一个页面URL地址,即当前页面是从哪个页面链接过来的,可以使用$_SERVER[‘HTTP_REFERER’],但是这个来源页面的URL地址是可以被伪造和欺骗的,本文章向大家介绍伪造HTTP_REFERER页面URL的三种...

    ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER的方法

    ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER的方法

    关于request.getHeader(Referer)的问题探讨

    我在某些页面中,有某几个按钮,分别用来跳转到action.do?method=m 但是,我是用 warpLoaction(”url”);这个来链接过去的,结果,我在火狐浏览器中,可以正确的 获取上次访问的页面,在IE6下却获取不到。后来去...

    asp Http_Referer,Server_Name和Http_Host

    以前感觉Request.ServerVariables里的值很多,现在看看还是那么多,不过今天谈其中的一个值----HTTP_Referer以及Request.ServerVariables里Server_Name与Http_Host之间有什么区别呢?

Global site tag (gtag.js) - Google Analytics