1.HTTP代理服务器的工作原理
在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,它们提供对目标资源的中转访问。一个HTTP请求可能被多个代理服务器转发,后面的服务器称为前面服务器的上游服务器。代理服务器按照其使用方式和作用,分为正向代理服务器、反向代理服务器、透明代理服务器。
- 正向代理服务器:要求客户端自己设置代理服务器的地址。客户的每次请求都将直接发送到该代理服务器,并由代理服务器来请求目标资源。比如处于防火墙内的局域网机器要访问Internet,或者要访问一些被屏蔽掉的国外网站,就需要使用正向代理服务器。
- 反向代理服务器:被设置在服务器端,因而客户端无须进行任何设置。反向代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。在这种情况下,代理服务器对外就表现为一个真实的服务器。
- 透明代理:只能设置在网关上。用户访问Internet的数据报必然都经过网关,如果在网关上设置代理,则该代理对用户来说显然是透明的。透明代理可以看作正向代理的一种特殊情况。
ps:代理服务器通常还提供缓存目标资源的功能(可选),这样用户下次访问同一资源时速度将很快。
2.HTTP通信
2.1HTTP请求
以下面请求为例:
GET http://www.baidu.com/index.html HTTP/1.0
Uaer-Agent: Wget/1.12(linux-gun)
Host:www.baidu.com
Connection:close
第一行为请求行。GET为请求方法,表示客户端以只读的方式来申请资源。以下为常见的HTTP请求方法:
HEAD,GET,OPTIONS,TRACE被视为安全的方法,因为它们只是从服务器获得资源或信息,而不对服务器进行修改。
GET,HEAD,OPTIONS,TRACE,PUT,DELETE等被认为是等幂的,即多次连续的、重复的请求和只发送一次该请求具有完全相同的效果。“http://www.baidu.com/index.html ” 是目标资源的URL,其中“http”是所谓的scheme,表示获取目标资源需要使用的应用层协议。其他常见的还有ftp,rtsp,file等。“www.baidu.com”指定资源所在目标主机。“index.html ”指定资源文件的名称。
- “HTTP/1.0”表示客户端使用的HTTP的版本号。
HTTP请求内容中的第2-4行都是HTTP请求的头部字段。一个HTTP请求可以包含多个头部字段,一个头部字段用一行表示,包含字段名称,冒号,空格,和字段值。HTTP请求中的头部字段可按任意顺序排列。
- “Uaer-Agent: Wget/1.12(linux-gun)”表示客户端使用的程序是wget。
- “Host:www.baidu.com”表示主机名是www.baidu.com.
- “Connection:close”是执行wget命令时传入的。用以告诉服务器处理完这个HTTP请求之后就关闭连接。
在所有头部字段之后,HTTP请求必须包含一个空行,以标识头部字段的结束。请求行和每个头部字段都必须以回车符换行符结束。
空行之后,HTTP请求可以包含可选的消息体。如果消息体非空,则HTTP请求的头部字段中必须包含描述该消息体长度的字段“Content-Length”。
2.2HTTP应答
以下面应答为例:
HTTP/1.0 200 OK
Server:BWS/1.0
Content-Length:8024
Content-Type:text/html;charset = gbk
Set-Cookie:BAIDUID=A5B6C72D68CF639CE8896FD79A03FBD8:FG:=1;expires=Wed,04 - Jul-42
00:10:47 GMT; path=/;domain=.baidu.com
Via:1.0 localhost (squid/3.0 STABLE18)
第一行是状态行。“HTTP/1.0”是服务器使用的HTTP协议的版本号。通常,服务器和客户端需要使用相同的HTTP协议版本。“200 OK”是状态码和状态信息。常见的状态码和状态信息:
第2-7行是HTTP应答的头部字段,与请求中的头部字段相同。
“Server:BWS/1.0”表示目标Web服务器程序的名字是BWS。
- “Content-Length:8024”表示目标文档的长度为8024字节
- “Content-Type:text/html;charset = gbk”表示目标文档MIME类型。其中“text”是主文档类型,“html”是子文档类型。“charset”是文档类型的一个参数,用于指定文档的字符编码。
- “Set-Cookie:BAIDUID=A5B6C72D68CF639CE8896FD79A03FBD8:FG:=1;expires=Wed,04 - Jul-42
00:10:47 GMT; path=/;domain=.baidu.com”表示服务器传送一个Cookie给客户端,其中“BAIDUID”指定Cookie的名字,“expires”指定Cookie的生存时间,“domain”和“path”指定该Cookie生效的域名和路径。 - “Via:1.0 localhost (squid/3.0 STABLE18)”表示HTTP应答在返回过程中经历过的所有代理服务器的地址和名称。
在所有头部字段之后,HTTP请求必须包含一个空行,以标识头部字段的结束。请求行和每个头部字段都必须以回车符换行符结束。
空行之后,是被请求文档inde.tml的内容。