HTTP Referer 教程

HTTP Referer 教程,第1张

现实生活中,购买服务或加入会员的时候,往往要求提供信息:"你从哪里知道了我们?"

浏览器向服务器请求资源的时候,Referer字段的逻辑是这样的,用户在地址栏输入网址,或者选中浏览器书签,就不发送Referer字段。

主要是以下三种场景,会发送Referer字段。

(1)用户点击网页上的链接。

(2)用户发送表单。

(3)网页加载静态资源,比如加载图片、脚本、样式。

上面这些场景,浏览器都会将当前网址作为Referer字段,放在 HTTP 请求的头信息发送。

浏览器的 JavaScript 引擎提供document.referrer属性,可以查看当前页面的引荐来源。注意,这里采用的是正确拼写。

上面链接点击产生的 HTTP 请求,不会带有Referer字段。

注意,rel="noreferrer"采用的是正确的拼写。

rel 属性只能定制单个元素的 Referer 行为,而且选择比较少,只能发送或不发送。W3C 为此制定了更强大的 Referrer Policy 。

Referrer Policy 可以设定8个值。

Referrer Policy 有 多种使用方法 。

(1)HTTP 头信息

服务器发送网页的时候,通过 HTTP 头信息的 Referrer-Policy 告诉浏览器。

(2)<meta>标签

也可以使用<meta>标签,在网页头部设置。

(3)referrerpolicy属性

<a>、<area>、<img>、<iframe>和<link>标签,可以设置referrerpolicy 属性。

还有一种比较老式的 技巧 ,但是非常有效,可以隐藏掉原始网址,谷歌和 Facebook 都在使用这种方法。

链接的时候,不要直接跳转,而是通过一个重定向网址,就像下面这样。

上面网址中,先跳转到/exit.php,然后再跳转到目标网址。这时,Referer字段就不会包含原始网址。

(完)

刚好把手机银行嵌入办事通的项目写完,该项目http请求较多,期间遇到了不少坑,也学到了不少东西,趁这个机会,简单梳理下!

图为http常见的请求方式,经常使用的,就是POST和GET,二者的区别,这里也不多做介绍。项目大致是这样的,提供接口给手机银行,获取请求参数:

request.getQueryString()方法即可取得参数相关信息,随机访问办事通提供的三个接口,最初定的接口,使用https协议,但办事通无法提供CA证书,后放弃(上一篇有提到过,无法绕过ssl验证)

随后办事通提供了另外接口,采用http协议:

采用Http发个简单Post请求,即可获取相应数据,测试环境很快调试完毕上线,上了生产,发现无论怎么都取不到数据。联系了办事通技术人员,打印了http请求头header,说请求头得有Referer,以前只是知道有这么个东西,但不知道具体有什么用,今天就简单说说。

加了这么一句话,请求OK了。那么,Referer是什么东西?

Referer是HTTP请求Header的一部分,当浏览器向Web服务器发送请求的时候,请求头信息一般需要包含Referer。该Referer会告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。

Referer作用是什么?

1)防盗链

比如办事通服务器只允许网站访问自己的静态资源,那服务器每次都需要判断Referer的值是否是zwfw.yn.gov.cn,如果是就继续访问,不是就拦截。

2)防止恶意请求

比如静态请求是 .html结尾的,动态请求是 .shtml,那么所有的*.shtml请求,必须 Referer为我自己的网站才可以访问,这就是Referer的作用。

空Referer是怎么回事?

空Referer是指Referer头部的内容为空,或者,一个HTTP 请求头中根本不包含Referer,那么什么时候HTTP请求会不包含Referer字段呢?

根据Referer的定义,它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。

比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer字段的,因为这是一个“凭空产生”的HTTP请求,并不是从一个地方链接过去的。

在防盗链设置中,允许空Referer和不允许空Referer有什么区别?

允许Referer为空,意味着你允许比如浏览器直接访问,就是空。

页面添加Referer元素需要使用meta referrer标签:

补充说明: Referer的正确英语拼法是 referrer 。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。其它网络技术的规范企图修正此问题,使用正确拼法,所以目前拼法不统一,还有它第一个字母是大写。

var

Flags, Headers, TargetFrameName, PostData: OLEVariant

Url, Ref: string

IEApp: OLEVariant

begin

Flags := '1'

TargetFrameName := ''

PostData := ''

Url := 'c:/BBS_POST2.html'//我本地的表单网页文件

Ref := 'http://XXX.XXXX.com/cachedir/1052/37/98/3798915_5.htm'//这里设置了 referer

Headers := 'Referer: ' + Ref + #10 + #13

Webbrowser1.Navigate(Url, Flags, TargetFrameName, PostData, Headers)//应该是带有 referer的 载入了本地将要提交的表单网页...

end

procedure TForm1.Button3Click(Sender: TObject)//加一个 提交表单的按钮

begin

Webbrowser1.OleObject.Document.all.item('submit1').Click//发送webbrowser1中的表单


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11471359.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存