http权威指南-http连接管理
2016-11-29 00:00
253 查看
摘要: 读书笔记
HTTP连接管理
浏览器查询这个主机名的IP地址;
浏览器获得端口号;
浏览器发起到主机名IP地址端口的80连接;
浏览器向服务器发送一条HTTP–GET报文;
浏览器从服务器读取HTTP响应报文;
HTTP 连接实际上就是 TCP 连接和一些使用连接的规则。TCP 为 HTTP 提供了一条可靠的比特传输管道。从 TCP 连接一端填入的字节会从另 一端以原有的顺序、正确地传送出来。
![](https://static.oschina.net/uploads/space/2016/1129/083326_xgKx_1791915.png)
TCP 的数据是通过名为 IP 分组(或 IP 数据报)的小数据块来发送的。这样的话, 如图 4-3a 所示,HTTP 就是“HTTP over TCP over IP”这个“协议栈”中的最顶层 了。其安全版本 HTTPS 就是在 HTTP 和 TCP 之间插入了一个(称为 TLS 或 SSL 的)密码加密层
客户端会向服务器发送一条TCP连接请求;
连接建立后,客户端就会通过新建立的TCP管道来发送HTTP请求;
Web服务器会回送HTTP响应;
大多数HTTP客户端都有一个小的DNS缓存,用来保存近期所有访问站点的IP地址。
TCP网络时延的大小取决于硬件速度、网络和服务器的负载、请求和响应保存的尺寸、以及客户端和服务器之间的距离。
持久以及并行连接:渐进式图片应用:先显示低分辨率的近似图像,然后再逐渐增减图片的分辨率。
持久连接
Keep-alive:实现
首部必须随所有希望保持持久连接的报文一起发送;
实体的主体部分必须有正确的
代理和网关必须执行
HTTP/1.1 逐渐停止了对
如果客户端不想在连接上发送其它请求了,就应该在最后一条请求中发送一个
只有当实体部分的长度和相应的
一个客户端对任何服务器或代理最多只能维护两条持久连接,以防服务器过载;
必须按照与请求相同的顺序回送HTTP响应;
客户端必须能够应付持久连接过早关闭,并重新发送为完成请求;
幂等请求:
非幂等请求:
套接字调用 close() 会将
HTTP连接管理
浏览器解析URL流程:
浏览器解析出域名;浏览器查询这个主机名的IP地址;
浏览器获得端口号;
浏览器发起到主机名IP地址端口的80连接;
浏览器向服务器发送一条HTTP–GET报文;
浏览器从服务器读取HTTP响应报文;
HTTP 连接实际上就是 TCP 连接和一些使用连接的规则。TCP 为 HTTP 提供了一条可靠的比特传输管道。从 TCP 连接一端填入的字节会从另 一端以原有的顺序、正确地传送出来。
![](https://static.oschina.net/uploads/space/2016/1129/083326_xgKx_1791915.png)
TCP 的数据是通过名为 IP 分组(或 IP 数据报)的小数据块来发送的。这样的话, 如图 4-3a 所示,HTTP 就是“HTTP over TCP over IP”这个“协议栈”中的最顶层 了。其安全版本 HTTPS 就是在 HTTP 和 TCP 之间插入了一个(称为 TLS 或 SSL 的)密码加密层
HTTP事物的时延有以下几种主要原因:
客户端首先要根据URL确定Web服务器的IP地址和端口号;客户端会向服务器发送一条TCP连接请求;
连接建立后,客户端就会通过新建立的TCP管道来发送HTTP请求;
Web服务器会回送HTTP响应;
大多数HTTP客户端都有一个小的DNS缓存,用来保存近期所有访问站点的IP地址。
TCP网络时延的大小取决于硬件速度、网络和服务器的负载、请求和响应保存的尺寸、以及客户端和服务器之间的距离。
HTTP连接方式
并行连接
并行连接:并行地执行多个事务,每个事务都有自己的TCP连接。多个连接会产生一些额外的开销,使用并行连接装载整个页面的时间很可能并串行下载时间更长。持久连接
持久连接:在事务处理结束之后仍然保持在打开状态的TCP连接被成为持久连接。非持久连接会在每个事务结束之后关闭,持久连接会在不同事务之间保持打开状态,直到客户端或服务器决定将其关闭为止。重用持久连接,就可以避开缓慢的连接建立阶段。而且已经打开的连接还可以避免慢启动的拥挤适应阶段,以便更快地进行数据的传输。持久以及并行连接:渐进式图片应用:先显示低分辨率的近似图像,然后再逐渐增减图片的分辨率。
持久连接两种类型:
Keep-alive持久连接
Keep-alive:实现
HTTP/1.0Keep-alive连接的客户端可以通过包含
Connection:Keep-Alive首部请求将一条连接保持在打开状态。如果服务器愿意为下一条请求将连接保持在打开状态,就在响应中包含相同的首部,如果响应中没有
Connection:Keep-Alive,客户端就会认为服务器不支持
Keep-alive。会在相应报文后关闭连接。
Keep-Alive限制和规则:
默认不使用,发送Connection:Keep-Alive激活;
首部必须随所有希望保持持久连接的报文一起发送;
实体的主体部分必须有正确的
Content-Length;
代理和网关必须执行
Connection首部的规则。
HTTP/1.1 逐渐停止了对
Keep-alive连接的支持,用一种名为
持久连接的改进型设计取代了它。在 HTTP/1.1 中,持久连接默认是激活的。
持久连接的规则和限制:
发送了Connection:close请求首部之后,客户端就无法在那条连接上发送更多的请求了;
如果客户端不想在连接上发送其它请求了,就应该在最后一条请求中发送一个
Connection:close首部;
只有当实体部分的长度和相应的
Content-Length一致,或是用分块传输编码方式编码的情况下,连接才能持久保持;
一个客户端对任何服务器或代理最多只能维护两条持久连接,以防服务器过载;
管道化连接:
HTTP/1.1 允许在持久化上可选地使用请求管道。这是在Keep-Alive连接上的进一步想能优化,在响应到达之前,可以将多条请求放入队列,当第一条请求通过网络流向另一端服务器时,第二条和第三条请求也可以开始发送了。
规则和限制:
如果客户端无法确认连接是持久的,就不应该使用管道;必须按照与请求相同的顺序回送HTTP响应;
客户端必须能够应付持久连接过早关闭,并重新发送为完成请求;
幂等的概念:
如果一个事务,不管是执行一次还是很多次,得到的结果都相同,这个事务就是幂等的。幂等请求:
GET
HEAD
PUT
DELETE
TRACE
OPTIONS
非幂等请求:
POST,非幂等方法或序列不能自动重试。比如:大多数浏览器都会在重载一个缓存的
POST相应时提供一个对话框,询问用户是否希望再次发起事务处理。
完全关闭和半关闭:
应用程序可以关闭TCP输入和输出信道中任意一个,或者将两个都关闭。
套接字调用 close() 会将
TCP连接的输入和输出传到都关闭了,称为“完全关闭”,还可以调用 shutdown() 单独关闭输入或输出信道,成为 “半关闭”。
相关文章推荐
- HTTP权威指南之连接管理
- HTTP权威指南-基础知识-连接管理与HTTP结构
- [HTTP权威指南]2.HTTP连接管理
- HTTP权威指南-连接部分
- 管理好页面图片,减少页面加载时http连接,优化页面
- http 权威指南 -- http the definitive guide
- Web架构“圣经”-------HTTP权威指南--1
- Web架构“圣经”-------HTTP权威指南--3
- HttpClient 教程2 (连接管理)
- HTTP权威指南 笔记
- HttpClient4.3教程 第二章 连接管理
- SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件
- HTTP权威指南
- SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查
- HttpClient4.3教程 第二章 连接管理
- Http-Components教程 -- 连接管理
- java程序员菜鸟进阶(七)《HTTP权威指南》之HTTP连接管理及对TCP性能的考虑
- HTTP权威指南-Content Publishing and Distribution
- Web架构“圣经”-------HTTP权威指南--5
- <Http权威指南 1,2,3>Http概述