前段时间做一个功能,利用到了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的时候,点击某个链接去到另外一个网站,那么从技术上来说,这样的访问和用户直接键入网址访问是没有什么分别的。
相关推荐
JavaScript中的`referer`是一个关键的HTTP头部字段,它记录了用户从哪个URL访问了当前页面。这个信息对于网站分析、追踪用户来源以及了解流量来源至关重要。在JavaScript中,我们可以使用`document.referrer`来获取...
CSRF攻击是Web应用安全中一个常见的问题, Referer头可以用来防御CSRF攻击,但是攻击者可以通过绕过Referer技巧来欺骗服务器。因此,Web开发者需要采取多种防御措施来防御CSRF攻击,例如验证Token、双重验证、验证码...
Nginx 提供了一个名为 ngx_http_referer_module 的模块,专门用于处理 HTTP 请求头中的 `Referer` 字段,从而实现防盗链功能。本文将详细介绍如何利用 Nginx 的 `referer` 指令进行防盗链配置。 `Referer` 字段在 ...
在Java Web开发中,我们经常利用HTTP协议提供的各种头部信息来实现这一目标,其中"request.getHeader("referer")"就是一种常用的手段。这个方法允许我们获取到用户发起请求时的来源页面URL,从而判断请求是否合法。 ...
在本例中,我们关注的是一个特定的BHO插件,它的主要功能是修改HTTP请求头中的`Referer`字段。 `Referer`头字段是HTTP协议中的一部分,它包含了用户从哪个URL点击链接来到当前页面的信息。这对于网站分析用户来源、...
HTTP协议观察工具是Web开发和前后端数据调试过程中的重要辅助软件。它允许开发者深入了解HTTP通信的每一个细节,从而优化网站性能,解决网络问题,确保数据传输的安全与准确。在这个数字化时代,HTTP作为互联网上...
在网络环境中,IP地址和HTTP_REFERER(HTTP-REFERER)是两种常见的用于跟踪和识别用户请求的数据。其中,IP地址通常用来标识网络中的设备;而HTTP_REFERER则记录了用户是从哪个页面链接过来的。这两种数据常常被网站...
本代码是处理android hybrid混合应用,遇到的webview 拦截 header referer 问题的解决。 场景:angular $HTTP 或者js的http请求或者其他。。webview成功拦截get 、post、delete请求,添加header,referer以及body ...
HTTP Referer是HTTP协议中的一个重要概念,主要用在Web服务器的请求头(header)中。当用户点击超链接从一个页面跳转到另一个页面时,浏览器会向目标服务器发送HTTP请求。在这个请求中,会包含一个名为“Referer”的...
主要的HTTP协议版本包括HTTP/1.0、HTTP/1.1和HTTP/2。HTTP/1.0是最基础的版本,引入了GET、POST和HEAD等基本请求方法。HTTP/1.1是目前最广泛使用的版本,它改进了HTTP/1.0,增加了持续连接、管道化、分块编码等特性...
HTTP协议的结构主要包括以下几个部分: 1. 请求行(Request Line):包括请求方法、URI、HTTP协议版本号等信息。 2. 请求头(Request Header):包括客户端浏览器的信息、 Cookie、 Referer等信息。 3. 请求体...
学习HTTP协议有助于我们更好地理解和优化Web应用的性能,解决网络通信中的各种问题。无论你是开发者、网络管理员还是网络安全专家,深入理解HTTP协议都是至关重要的。通过阅读《HTTP权威指南》等专业书籍,或者在线...
PHP中的HTTP_REFERER函数是PHP语言中用于获取HTTP请求头中的Referer(推荐人)字段的值。这个字段通常由浏览器在发送请求到服务器时自动填充,表明用户是从哪个页面链接过来的。然而,需要注意的是,HTTP_REFERER...
总的来说,这份资料详细讲解了HTTP协议的各个方面,包括版本历史、TCP/IP基础、请求和响应的构成及各个组件的作用,是学习HTTP协议的宝贵资源。通过深入学习这些知识,读者将能够更好地理解Web通信的本质,为从事Web...
HTTP_REFERER是HTTP协议中的一个字段,用于记录用户从哪个页面链接访问当前页面的信息。在某些情况下,网站可能会检查这个字段来确认请求来源的有效性或安全性。 描述中提到的问题是作者在尝试使用VBS进行POST提交...
HTTP协议建立在TCP/IP协议之上,确保数据能够可靠地在网络中传输。 HTTP协议的工作模式基于请求-响应模型。客户端(浏览器)发起一个HTTP请求,这个请求由三部分组成:请求行、请求头和请求正文。请求行包括请求...
HTTP响应同样由几部分构成:状态行、消息报头和实体数据。 - **状态行**:包含HTTP版本、状态码和状态信息。状态码用于表示服务器对请求的处理结果,如200 OK表示请求成功,404 Not Found表示未找到请求的资源,500...
在网页开发中,HTTP_REFERER头信息是一个非常重要的字段,它标识了用户是从哪个页面跳转到当前页面的。然而,由于各个浏览器之间的实现差异,获取HTTP_REFERER的方式并不总是相同,尤其是在Internet Explorer(IE)...
这个协议是无状态的,即每次请求之间没有关联,这也是为什么后来出现了Cookie和Session来维持会话状态。接下来,我们将深入探讨HTTP协议的主要组成部分和关键概念。 1. **HTTP版本** - HTTP/1.0:最初的版本,主要...