基本Web服务器请求的步骤
1、建立连接
接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭。
- 处理新连接
- 客户端主机名识别:反向DNS查找,将IP地址转换为客户端主机名
- 过ident确定客户端用户:客户端支持ident协议就会在TCP端口113监听ident请求(但ident请求被认为不太安全,容易被伪造)
2、接收请求报文
从网络中读取一条 HTTP 请求报文。
- 解析请求行,查找请求方法、URI及版本号,各项之间空格隔开,以一个
CRLF
结束。 - 读取以CRLF结尾的报文首部
- 检测到以CRLF结尾的空行
- 若有,读取请求主体
3、处理请求
4、请求资源
5、构建响应
6、发送响应
7、记录事务处理过程
代理
代理即是服务器又是客户端
。
代理vs网关
代理使用同一种协议,网关则将不同协议连接起来。
为什么使用代理及各种代理类型
代理服务器可以监视流量并对其进行修改,比如:儿童过滤器、文档访问控制、安全防火墙、web缓存、反向代理、内容路由器、转码器、匿名者等。
儿童安全的因特网过滤器:
集中式文档访问控制:
安全防火墙:
web缓存: 维护常用文档的本地副本。
反向代理: 可以发起与其他服务器的通信,按需定位所请求的内容,提高访问慢速服务器上公共内容的性能。
内容路由器:
根据因特网流量状况及内容类型将请求导向特定的web服务器。
内容转码者:
代理服务器在将内容发送给客户端之前,可以修改内容的主体格式。在这些数据表示法之间进行的透明转换被称为转码
。
匿名者:
匿名代理会主动从HTTP报文中删除身份特征,提高私密性和匿名性。
代理服务器的部署
- 出口代理
- 访问(入口)代理
- 反向代理
- 网络交换代理
代理的层次结构
代理服务器被赋予了父和子的关系,下一个入口代理(靠近服务器)被称为父代理
(上级代理),下一个出口代理(靠近客户端)被称为子代理
(下级代理)。
代理层次结构可以是动态的,随请求而变:
动态选择父代理的例子:
- 负载均衡:子代理根据父代理的工作负载级别来决定如何选择一个父代理。
- 地理位置附近的路由:子代理可能会选择负责原始服务器所在物理区域的父代理。
- 协议/类型路由:子代理可能会根据URI将报文转发到不同的父代理和原始服务器上去。
- 基于订购的路由:如果发布者以高性能服务额外付费了,这些URI就会被转发到大型缓存或压缩引擎上去,以提高性能。
代理是如何获取流量的
- 修改客户端配置为使用代理服务器
- 修改网络,监视交换设备及路由设备(拦截代理)
- 修改DNS的命名空间
- 修改web服务器,将客户端请求重定向到一个代理上去
客户端的代理设置
- 手工配置
- 预先配置浏览器
- 代理的自动配置
- WPAD(代理自动发现协议)的代理发现
拦截代理
拦截代理会获取服务器请求
没有代理时URI的解析
没有提供显式的代理时,浏览器会对部分主机名进行自动扩展。
有显式代理时URI的解析
有显式代理时,浏览器不会对不完整的主机名进行自动扩展。
有拦截代理时URI的解析
使用拦截代理时,浏览器无法检测出已停用服务器的IP地址。