Web 和 HTTP
Web的应用层协议是HTTP,超文本传输协议,通过交换HTTP报文的方式进行会话。
HTTP使用TCP作为它支撑的运输协议,HTTP客户首先发起一个与服务器的 TCP连接。一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问 TCP。
分层体系结构最大的优点,即 HTTP 协议 不用担心数据丢失, 也不关注 TCP 从网络的数据丢失和乱序故障中恢复的细节 。
HTTP是无状态协议,Web使用的也是客户-服务器的应用程序体系结构,Web 服务器总是打开的,具有一个固定的 IP 地址, 且它服务于可能来自数以百万计的不同浏览器的请求 。
非持续连接和持续连接
- 非持续连接(HTTP 1.0)
每个 TCP 连接在服务器发送一个对象后关闭,即该连接并不为其他的对象而待续下来 。 值得注意的是每个 TCP 连接只传输一个请求报文和一个响应报文。
事实上,用户能够配置现代浏览器来控制连接的并行度 。在默认方式下,大部分浏览器打开 5 -10 个并行的 TCP 连接,而每条连接处理一个请求响应事务 。
在这个过程中,TCP连接三次握手,前两个部分会消耗一个RTT时间,第三次握手时携带请求的HTTP报文,以及服务器返回响应报文并携带HTML文件,占用一个RTT。粗略地讲,总的响应时间就是两个 RTT 加上服务器传输 HTML 文件的时间 。
缺点:
- Web服务器负担重,每个请求都要建立和维护一个全新的连接,客户和服务器都要分配TCP缓存和保持TCP变量。
- 经受两倍RTT时延。
- 持续连接
在采用 HTTP 1. 1 持续连接的清况下,服务器在发送响应后保持该 TCP 连接打开 。 在相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送 。对对象的这些请求可以一个接一个地发出,而不必等待对未决请求(流水线)的回答 。
HTTP/2[ RFC 7540 ]
是在 HTTP 1. 1 基础上构建 的,它允许在相同连接中多个请求和回答交错,并增加了在该连接中优化 HTTP 报文请求 和回答的机制 。
HTTP报文格式
- 请求报文
- 请求行:请求方法,URL、HTTP版本
- 首部行
- Host:对象所在的主机
- Connection:close(表示不使用持续连接),keep-alive(持续连接)
- User-agent:指明用户代理,浏览器类型
- Accept-language:文件的语言版本
- 实体体
- 响应报文
- 状态行:HTTP版本、状态码、短语
- 首部行
- Content-Length:内容长度
- Last-Modified:内容最后修改时间
- Content-Type:实体体中对象的类型
- 实体体
cookie
HTTP是无状态的,使用cookie来跟踪用户的状态。
cookie技术有4个组件:
- 在HTTP响应报文中的一个cookie首部行
- 在 HTTP请求报文中的一个 cookie首部行
- 在用户端系统中保留有一个 cookie 文件,并由用户的浏览器进行管理
- 位于 Web 站点的一个后端数据库。
过程
- 当请求报文到达服务器时,产生一个唯一识别码,并以此作为索引在它的后端数据库中产生一个表项。
- 接下来服务器用一个包含
Set-cookie
首部的HTTP响应报文对浏览器进行响应,其中Set-cookie: 首部含有该识别码(例如是Set-cookie: 1678
) - 当浏览器收到了该 HTTP 响应报文时,它会看到该 Set-cookie: 首部。 该浏览器在它管理的特定 cookie文件中添加一行,该行包含服务器的主机名和在 Set-cookie: 首部中的识别码。
- 每请求一个该站点下的Web页面时, 其浏览器就会查询该 cookie 文件并抽取对这个网站的识别码,并放到 HTTP 请求报文中包括识别码的 cookie 首部。
在这种方式下,服务器可以跟用户站点的活动。它确切地知道用户 1678 按照什么顺序、在什么时间、 访问了哪些页面!
因此,cookie 可以用于标识一个用户。
Web缓存(CDN技术)
Web 缓存器 (Web cache) 也叫代理 服务器 (proxy server) , 它是能够代表初 始 Web 服务器来满足 HTTP 请求的网络实体。
Web 缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。
过程
- 浏览器先创建一个到Web缓存器的TCP连接,并发送一个HTTP请求。
- Web 缓存器进行检查,看看本地是否存储了该对象副本 。 如果有, Web 缓存器就向客户浏览器用 HTTP 响应报文返回该对象 。
- 如果 Web 缓存器中没有该对象,它就打开一个与该对象的初始服务器的TCP连接。 Web缓存器则在这个缓存器到服务器的TCP连接上发送一个对该对象的 HTTP 请求 。 在收到该请求后,初始服务器向该 Web 缓存器发送具有该 对象的 HTTP 响应 。
- 当 Web缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览 器用 HTTP 响应报文发送该副本(通过现有的客户浏览器和 Web 缓存器之间的 TCP 连接)。
Web 缓存器既是服务器又是客户。当它接收浏览器的请求并发回响应时,它是一个服务器 。当它向初始服务器发出请求并接收响应时,它是一个客户 。
好处
- Web 缓存器可以大大减少对客户请求的响应时间
- Web 缓存器能够大大减少接入链路到因特网的通信量,从而降低对带宽的要求,降低了成本。
CDN
通过使用内容分发网络 (Content Distribution Network, CDN) , Web 缓存器正在因特网中发挥着越来越重要的作用。CDN 公司在因特网上安装了许多地理上分散的缓存器,因而使大量流量实现了本地化。