文档章节

http权威指南-http连接管理

dfatxm
 dfatxm
发布于 2016/11/29 08:44
字数 1437
阅读 45
收藏 2

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。会在相应报文后关闭连接。

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() 单独关闭输入或输出信道,成为 “半关闭”。

 

© 著作权归作者所有

共有 人打赏支持
上一篇: h5是啥
dfatxm
粉丝 3
博文 66
码字总数 20630
作品 0
厦门
前端工程师
私信 提问
长连接与短连接的理解

1.定义 长连接:数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。(如qq,建立链接之后就不断开,知道你关闭和某个用...

浮躁的码农
2016/02/24
76
0
Mycat读写分离笔记Windows

Mycat读写分离笔记Windows 自己搭了一个运用Mycat中间件搭建了一个读写分离的demo,昨晚还在奋战当中,因为连接mycat的时候老是报错:No Mycat DataBases selected.尝试了很多的方法,然后还...

推荐码发放
04/29
0
0
HTTP事务的延迟—TCP的影响

导读:最近看完了大部头著作《HTTP权威指南》,对于此类指南类、手册类图书,往往让我们联想到的就是枯燥无味的使用讲解、技术指标讲解......使人头大。但是这本书却让我觉得读起来很“清新”...

yaocoder
2015/04/05
0
0
Eclipse远程连接Hbase

安装Hadoop和Hbase hadoop和hbase版本的选择以及安装,参考之前的文章: Hadoop的版本选择和单机模式:http://codingo.xyz/index.php/2016/08/16/hadoop-stand-alone/ Hadoop的伪分布式模式:...

ksfzhaohui
2016/09/14
620
2
OSC 第 108 高手问答 —— 从 Docker 到 K8s 实践

OSCHINA 本期高手问答( 1月12日- 1月18日) 我们请来了 @mycat 吴治辉为大家解答关于 Kubernetes 方面的问题。 吴治辉,@mycat ,拥有超过 15 年的软件研发经验,精通Java编程,专注于电信软件...

叶秀兰
2016/01/11
11.3K
45

没有更多内容

加载失败,请刷新页面

加载更多

easyui tree

<tr> <th><spring:message code="wf.borrow.examiner"/></th> <td> <input id="inp-examiner1" type="text" name="examiner1" style="width:197px;height:20px;" data-options="required:tru......

小兵胖胖
18分钟前
2
0
内存性能的正确解读

一台服务器,不管是物理机还是虚拟机,必不可少的就是内存,内存的性能又是如何来衡量呢。 1. 内存与缓存 现在比较新的CPU一般都有三级缓存,L1 Cache(32KB-256KB),L2 Cache(128KB-2MB)...

阿里云云栖社区
21分钟前
1
0
微服务架构:Zuul 1.0 和 2.0 我们该如何选择?

在今年5月中,Netflix终于开源了它的支持异步调用模式的Zuul网关2.0版本,真可谓千呼万唤始出来。从Netflix的官方博文[附录1]中,我们获得的信息也比较令人振奋: The Cloud Gateway team a...

大木老师故事的小黄花
22分钟前
1
0
基础掌握

哪些是基础功呢?我觉得包括: 数据结构和算法:链表、队列、栈、堆、树(RBT, B/B+)、跳表、哈希、图;查找(二分、bst)、排序(冒泡、插入、快排、归并、堆排、希尔)、递归、归并、回溯、...

边鹏_尛爺鑫
23分钟前
1
0
Android APP的安装路径

一. Android应用安装路径有两种情况: system/app 系统自带的应用程序,无法删除。root后可以删除,注意可能造成系统崩溃,不过有的垃圾捆绑软件只能这么删除了 data/app 用户程序安装的目录,...

天王盖地虎626
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部