HTTP协议 III 服务类型
基于HTTP协议,技术上进行了多种技术实现
Web服务器
web服务器是基于Http协议的最基础实现:用户通过浏览器代理 发送HTTP请求,服务端解析请求提供对应服务。
一个基础的web服务器具备以下流程 :
(1) 建立连接——接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭。
1 |
|
(2)接收请求——从网络中读取一条HTTP请求报文。
1 |
|
(3)处理请求——对请求报文进行解释,并采取行动。
1 |
|
(4)访问资源——访问报文中指定的资源。
1 |
|
(5)构建响应——创建带有正确首部的HTTP响应报文。
1 |
|
(6)发送响应——将响应回送给客户端。
1 |
|
(7)记录事务处理过程——将与已完成事务有关的内容记录在一个日志文件中。
1 |
|
代理
Web代理(proxy)服务器是网络的中间实体。代理位于客户端和服务器之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文
代理 : 客户端向代理服务器发送请求,代理服务器转发给后端的引用服务器
反向代理:客户端不感知代理存在,请求发向代理,由其代表后端服务器处理请求(如 Nginx、API 网关)
为什么需要代理
- 消息过滤,代理可以作为中间过程为最终客户进行内容筛选。通过检查请求/响应内容对用户的访问进行控制
- 访问策略,代理通过解析中间消息,可以对不同的用户实施不同的访问策略
- 防火墙,通过检查传输的Http消息,来监控网络中是否存在恶意信息
- web缓存,代理缓存维护了常用文档的本地副本,并将它们按需提供,以减少缓慢且昂贵的因特网通信。
- 反向代理,代理可以假扮Web服务器。这些被称为替代物(surrogate)或反向代理(re-verse proxy)的代理接收发给Web服务器的真实请求,但与Web服务器不同的是,它们可以发起与其他服务器的通信,以便按需定位所请求的内容。
缓存
缓存服务器,用于分摊对web服务器的访问压力,其核心逻辑是收到请求后
(1) 接收——缓存从网络中读取抵达的请求报文。
1 |
|
(2) 解析——缓存对报文进行解析,提取出URL和各种首部。
1 |
|
(3) 查询——缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保存在本地)。
1 |
|
(4) 新鲜度检测——缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新。
1 |
|
(5) 创建响应——缓存会用新的首部和已缓存的主体来构建一条响应报文。
1 |
|
(6) 发送——缓存通过网络将响应发回给客户端。
1 |
|
(7) 日志——缓存可选地创建一个日志文件条目来描述这个事务。
1 |
|
网关
网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法。网关是资源和应用程序之间的粘合剂。应用程序可以(通过HTTP或其他已定义的接口)请求网关来处理某条请求,网关可以提供一条响应。
应用程序网关API就是通用网关接口(Common Gateway Interface,CGI)。CGI是一个标准接口集,Web服务器可以用它来装载程序以响应对特定URL的HTTP请求,并收集程序的输出数据,将其放在HTTP响应中回送。在过去的几年中,商业Web服务器提供了一些更复杂的接口,以便将Web服务器连接到应用程序上去。
隧道
Web隧道允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP上捎带其他协议数据了。使用Web隧道最常见的原因就是要在HTTP连接中嵌入非HTTP流量,这样,这类流量就可以穿过只允许Web流量通过的防火墙了。
隧道连接请求
1 |
|
隧道连接响应
1 |
|
隧道在发出连接请求后,不必等待响应,就会以隧道形式发送数据到对端。如果收到认证响应或其他非成功响应,请求端需要做好重新准备数据的准备。