http权威指南-http链接管理

HTTP链接管理浏览器

浏览器解析URL流程:

  1. 浏览器解析出域名;
  2. 浏览器查询这个主机名的IP地址;
  3. 浏览器得到端口号;
  4. 浏览器发起到主机名IP地址端口的80链接;
  5. 浏览器向服务器发送一条HTTP–GET报文;
  6. 浏览器从服务器读取HTTP响应报文;

HTTP 链接实际上就是 TCP 链接和一些使用链接的规则。TCP 为 HTTP 提供了一条可靠的比特传输管道。从 TCP 链接一端填入的字节会从另 一端以原有的顺序、正确地传送出来。缓存

TCP 的数据是经过名为 IP 分组(或 IP 数据报)的小数据块来发送的。这样的话, 如图 4-3a 所示,HTTP 就是“HTTP over TCP over IP”这个“协议栈”中的最顶层 了。其安全版本 HTTPS 就是在 HTTP 和 TCP 之间插入了一个(称为 TLS 或 SSL 的)密码加密层安全

HTTP事物的时延有如下几种主要缘由:

  1. 客户端首先要根据URL肯定Web服务器的IP地址和端口号;
  2. 客户端会向服务器发送一条TCP链接请求;
  3. 链接创建后,客户端就会经过新创建的TCP管道来发送HTTP请求;
  4. Web服务器会回送HTTP响应;

大多数HTTP客户端都有一个小的DNS缓存,用来保存近期全部访问站点的IP地址。服务器

TCP网络时延的大小取决于硬件速度、网络和服务器的负载、请求和响应保存的尺寸、以及客户端和服务器之间的距离。网络

HTTP链接方式

并行链接

并行链接:并行地执行多个事务,每一个事务都有本身的TCP链接。多个链接会产生一些额外的开销,使用并行链接装载整个页面的时间极可能并串行下载时间更长。优化

持久链接

持久链接:在事务处理结束以后仍然保持在打开状态的TCP链接被成为持久链接。非持久链接会在每一个事务结束以后关闭,持久链接会在不一样事务之间保持打开状态,直到客户端或服务器决定将其关闭为止。重用持久链接,就能够避开缓慢的链接创建阶段。并且已经打开的链接还能够避免慢启动的拥挤适应阶段,以便更快地进行数据的传输。编码

持久以及并行链接:渐进式图片应用:先显示低分辨率的近似图像,而后再逐渐增减图片的分辨率。加密

持久链接两种类型:

  1. Keep-alive
  2. 持久链接

Keep-alive:实现 HTTP/1.0Keep-alive 链接的客户端能够经过包含 Connection:Keep-Alive 首部请求将一条链接保持在打开状态。若是服务器愿意为下一条请求将链接保持在打开状态,就在响应中包含相同的首部,若是响应中没有 Connection:Keep-Alive,客户端就会认为服务器不支持Keep-alive。会在相应报文后关闭链接。spa

Keep-Alive限制和规则:

  1. 默认不使用,发送 Connection:Keep-Alive 激活;
  2. 首部必须随全部但愿保持持久链接的报文一块儿发送;
  3. 实体的主体部分必须有正确的 Content-Length
  4. 代理和网关必须执行 Connection 首部的规则。

HTTP/1.1 逐渐中止了对 Keep-alive 链接的支持,用一种名为 持久链接 的改进型设计取代了它。在 HTTP/1.1 中,持久链接默认是激活的。设计

持久链接的规则和限制:

  1. 发送了 Connection:close 请求首部以后,客户端就没法在那条链接上发送更多的请求了;
  2. 若是客户端不想在链接上发送其它请求了,就应该在最后一条请求中发送一个 Connection:close 首部;
  3. 只有当实体部分的长度和相应的 Content-Length 一致,或是用分块传输编码方式编码的状况下,链接才能持久保持;
  4. 一个客户端对任何服务器或代理最多只能维护两条持久链接,以防服务器过载;

管道化链接:

HTTP/1.1 容许在持久化上可选地使用请求管道。这是在 Keep-Alive 链接上的进一步想能优化,在响应到达以前,能够将多条请求放入队列,当第一条请求经过网络流向另外一端服务器时,第二条和第三条请求也能够开始发送了。

规则和限制:

  1. 若是客户端没法确认链接是持久的,就不该该使用管道;
  2. 必须按照与请求相同的顺序回送HTTP响应;
  3. 客户端必须可以应付持久链接过早关闭,并从新发送为完成请求;

幂等的概念:

若是一个事务,不论是执行一次仍是不少次,获得的结果都相同,这个事务就是幂等的。

幂等请求: GET HEAD PUT DELETE TRACE OPTIONS

非幂等请求: POST,非幂等方法或序列不能自动重试。好比:大多数浏览器都会在重载一个缓存的POST相应时提供一个对话框,询问用户是否但愿再次发起事务处理。

彻底关闭和半关闭:

应用程序能够关闭 TCP 输入和输出信道中任意一个,或者将两个都关闭。

套接字调用 close() 会将 TCP链接的输入和输出传到都关闭了,称为“彻底关闭”,还能够调用 shutdown() 单独关闭输入或输出信道,成为 “半关闭”。

相关文章
相关标签/搜索