现在的位置: 首页 > 综合 > 正文

HTTP Referer

2013年09月08日 ⁄ 综合 ⁄ 共 2226字 ⁄ 字号 评论关闭

同事在修复一个bug的时候,发现有的文件无法下载,我们用的是android系统自带的系统下载去下的,这怎么能下载失败呢?用UC浏览器的自带的下载功能就可以下载成功,证明还是某个地方有问题。初期分析可能没加UA,但是通过抓包,发现UA加了,然后继续抓包分析,分析了老长时间,并各种调试,最后终于发现,原来和UC浏览器的差别就在 HTTP_REFERER 这个属性上,我们没加。这个坑好深啊,真的么想到是这个原因。百度百科上看了下,原来是为了防盗链而用的。

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP
Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

关于HTTP Referer使用非常简单,使用场合比较多的是用于页面统计、图片防盗链(可以在apache 中进行设置,从非自己domain或空Referer过来的请求一律拒绝)等;但还是有一点值得注意:Referer是不安全的,客户端可以通过设置改变 Request中的值,尽量不要用来进行安全验证等方面;下面介绍下默认情况下Referer可能出现为空的场景:

1、页面从Https跳转到Http;应该是处于安全考虑,该点在RFC-2616中有说明;主流浏览器均遵守这个规则,比如IE、FF;但默认情况下Https到Https是会发送Referer的;

2、直接在浏览器中输入目标URL;

3、由于FF提供了很强大的自定义参数设置功能,所以我们可以通过about:config页面修改以下两个选项的默认设置:

network.http.sendRefererHeader (default=2)
设置Referer的发送方式,0为完全不发送,1为只在点击链接时发送,在访问页面中的图像什么的时候不发送,2为始终发送。

network.http.sendSecureXSiteReferrer (default=true)
设置从一个Https访问到另外Https页面的时候是否发送Referer,true为发送,false为不发送。

另外,对于一个好的应用来说,比如UC,QQ,海豚,360等等的浏览器都开始不依赖系统提供的下载了,开始使用自己做的下载工具,支持多文件下载,支持暂停,继续等功能,总之,功能比系统下载功能还要强大,希望有空可以研究下,自己写一个下载工具。可以下载图片,url, 普通的文件等。

参考链接:

http://baike.baidu.com/view/2449520.htm

同事在修复一个bug的时候,发现有的文件无法下载,我们用的是android系统自带的系统下载去下的,这怎么能下载失败呢?用UC浏览器的自带的下载功能就可以下载成功,证明还是某个地方有问题。初期分析可能没加UA,但是通过抓包,发现UA加了,然后继续抓包分析,分析了老长时间,并各种调试,最后终于发现,原来和UC浏览器的差别就在 HTTP_REFERER 这个属性上,我们没加。这个坑好深啊,真的么想到是这个原因。百度百科上看了下,原来是为了防盗链而用的。

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP
Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

关于HTTP Referer使用非常简单,使用场合比较多的是用于页面统计、图片防盗链(可以在apache 中进行设置,从非自己domain或空Referer过来的请求一律拒绝)等;但还是有一点值得注意:Referer是不安全的,客户端可以通过设置改变 Request中的值,尽量不要用来进行安全验证等方面;下面介绍下默认情况下Referer可能出现为空的场景:

1、页面从Https跳转到Http;应该是处于安全考虑,该点在RFC-2616中有说明;主流浏览器均遵守这个规则,比如IE、FF;但默认情况下Https到Https是会发送Referer的;

2、直接在浏览器中输入目标URL;

3、由于FF提供了很强大的自定义参数设置功能,所以我们可以通过about:config页面修改以下两个选项的默认设置:

network.http.sendRefererHeader (default=2)
设置Referer的发送方式,0为完全不发送,1为只在点击链接时发送,在访问页面中的图像什么的时候不发送,2为始终发送。

network.http.sendSecureXSiteReferrer (default=true)
设置从一个Https访问到另外Https页面的时候是否发送Referer,true为发送,false为不发送。

另外,对于一个好的应用来说,比如UC,QQ,海豚,360等等的浏览器都开始不依赖系统提供的下载了,开始使用自己做的下载工具,支持多文件下载,支持暂停,继续等功能,总之,功能比系统下载功能还要强大,希望有空可以研究下,自己写一个下载工具。可以下载图片,url, 普通的文件等。

参考链接:

http://baike.baidu.com/view/2449520.htm

抱歉!评论已关闭.