一些网络知识

HTTP代理原理及实现

HTTP代理有两种形式,分别简单介绍如下:

第一种是RFC描述的普通代理。这种代理扮演的是[中间人]的角色,对于链接到它的客户端来说,它是服务端;而对于链接到服务端来说,它是客户端,它负责两端来回传送HTTP报文。

客户端 —–> 服务端(此时的RFC就是服务端)
(此时的RFC就是客户端)客户端 <—– 服务端

第二种是TCP(通过web代理服务器用隧道方式传输基于TCP的协议)描述的隧道代理。它通过HTTP协议正文部分(Body)完成通讯,以HTTP的方式实现任意基于TCP的应用层协议代理。这种代理是使用HTTP的CONNECT方法建立连接的。

普通代理

HTTP客户端向代理发送请求报文,代理服务器需要正确地处理请求和连接(例如正确处理 Connection: keep-alive),同时向服务器发送请求,并将收到的响应转发给客户端。

假如我通过代理访问A站点,对一A来说,它会把代理当做成客户端,完全察觉不到真正客户端的存在,这实现了隐藏客户端IP的目的。当然代理也可以修改HTTP请求头部,通过X-Forwarded-IP这样的自定义头部告诉服务器端真正的客户端IP。但是服务器无法验证这个自定义头部真的是由代理添加,还是客户端修改了请求头,所以从HTTP头部字段获取IP时,需要格外小心。