|
|
本帖最后由 L.Jonsson 于 2013-3-22 17:15 编辑
HTTP代理和HTTP协议头对比分析
使用HTTP代理上网,可以突破自身IP访问限制,访问国外站点,而且可以隐藏真是IP。目前有很多用户使用代理方式上网,给网络管理带来诸多不便。
用户在设置了浏览器的代理之后,再访问网页,浏览器会自动将HTTP请求数据包发往代理服务器。这期间,IP地址会发生改变,也就是说网络层需要被处理。但是除了网络层改变之外,应用层的HTTP协议头会不会有什么变化呢,我们又如何判别用户是设置了代理呢?
首先我们对一个标准HTTP协议的请求数据进行分析:
发现在HTTP头部中有一个头域User-Agent,而翻译后就是“用户代理”的意思。那么到底这个头域是不是HTTP是否使用代理的一个标志呢?通过查询资料,如下:
在使用HTTP协议进行请求时,HTTP协议头部会添加User-Agent,该信息可以标识请求者的一些信息,如什么浏览器类型和版本、操作系统,使用语言等信息。
通过抓包分析,得知IE,Firefox,傲游几个浏览器中 User-Agent的信息都为 “Mozilla/....”开头,而Opera 则不同的版本会有所不同,具体信息可以参照 下面网站,该网站信息很全,列出了常见的爬虫程序,浏览器,feed reader等几类软件所使用的User-Agent信息。
http://www.useragentstring.com/pages/useragentstring.php
根据所提供的信息,可以发现绝大部分的浏览器使用的User-Agent 信息都是以 “Mozilla/....”开头,而网络爬虫则只有一小部分使用 “Mozilla/....”信息。所以一般来统计的话,可以根据此信息确定使用浏览器所发出的HTTP请求。
因此,可以看出User-Agent头域根本与代理服务器无关,而仅仅是包含了用户的浏览器类型等信息而已。
那么到底有没有哪个字段表明用户设置了代理呢,为此在网上找了一个代理服务器,然后进行抓包分析,并将设置代理前后的数据包进行对比。
设置代理前:
设置代理后:
通过对比可以看出,使用代理后的HTTP请求数据中包含一个“Proxy-Connection:Keep-Alive“的字段。
根据一些网站的解释:
Proxy-Connection:此协议头是使用HTTP协议的浏览器的一个错误。这个协议头名称来自于一个错误的类比。它不是标准协议的一部分。之所以说成是错误的类比,原因是标准协议中已经存在一种机制可以完成此协议头的功能。此协议头强加在HTTP服务器上,实际上不使用代理的服务器可以使用标准的确认机制(也就是说没有此协议头,HTTP服务器也可以正常工作)。
HTTP已经实现了相同目的的机制,这就是Connection头域,详见RFC 2616的14.10节。之所以说Proxy-Connection头域是一个错误,部分的原因是没有必要使用另外一个新协议头完成已存在协议头相同功能。与Proxy-Connection头相比,Connection协议头几乎提供了相同的功能,除了错误部分。而且,Connection协议头可用于任意连接之间,包括HTTP服务器,代理,客户端,而不是像Proxy-Connection一样,只能用于代理服务器和客户端之间。
通过以上简要分析,得出设置HTTP代理后的区别有一下几点:
1. 连接的不是目标服务器的IP地址和端口而是代理服务器IP和端口
2. 在HTTP头部中包含有一个较明显的特征:“Proxy-Connection:Keep-Alive“
|
|