文档章节

HTTP协议学习总结五(持久连接)

xuange
 xuange
发布于 2014/09/27 15:39
字数 913
阅读 2327
收藏 126

##一条http请求的消耗 http协议是建立在tcp/ip协议之上的,当客户端请求服务端资源时,双方会建立一个tcp连接。tcp连接的代价是比较大的,一次连接客户端和服务器总共要发三次包。 如果一次请求多个资源时,那么消耗会相当的大,时间也会很久


http持久连接Connection:keep-alive

在前面讲请求头时,我提到过http请求头Connection:keep-alive,通过这个请求头,客户端就可以告诉服务器,暂时不要关闭tcp连接,下一个请求利用这个tcp连接继续传输数据. 当然了,tcp连接是会浪费一定的服务器资源的,所以tcp连接也不会一直保持连接,客户端和服务端都可以通过Connection:close显示的告诉对方,连接已经关闭。如果没有告诉的话,服务器一般会有一个超时时间,在指定的timeout时间里,如果没有新的数据通过这个tcp连接传输进来的话,服务器就当这个连接已经结束,会关闭连接。


##web应用的资源请求方式 往往我们通过浏览器去访问一个web应用,通常服务器会返回一个html页面,客户端解析html页面,然后继续请求javascript脚本、css样式、图片等资源。如果一个资源一个资源的去请求,那么客户端可能需要很长时间才能看到加载完成后的页面,这对于一个资源比较多的web应用是不能接受的,这么慢的浏览器客户端也不会有人使用。那么浏览器是用什么方式提高加载速度的呢?


##并行连接 现代的浏览器往往采用并行连接的方式,在同一个时间点内打开多个tcp连接,并行的加载资源。那么并行的打开多少个连接合适呢? 可能有人会说,有多少个资源请求就打开多少个tcp连接应该是最快的。事实情况却不是这样的,因为打开的不是门,而是tcp连接,3次握手也是需要时间消耗的,所以打开多也不一定响应快,同时tcp连接也是消耗服务器资源的,一个客户端一次就打开N个连接,那么访问量大了,服务器的负载能力也就慢了,响应时间肯定也就长了。 通常浏览器只会并行打开少量的tcp连接(不会超过5个)。


##持久连接+并行连接 既然并行连接不一定是最快的,那么现代浏览器一般采用什么方式呢?通用的方式是这样的,当用户输入想要访问的资源后,客户端先打开一条持久连接获取html资源,然后解析html,获取需要继续请求的资源(js,css,img等),并发的打开少量持久连接,请求一部分资源,剩下的资源会在上面请求的资源到达后,再利用这些还没有关闭的tcp连接,继续请求资源。 通过结合持久连接和并行连接可以让资源请求速度更快,也让服务器负载不是那么大。

© 著作权归作者所有

xuange
粉丝 36
博文 5
码字总数 5204
作品 0
广州
程序员
私信 提问
加载中

评论(5)

xuange
xuange

引用来自“杨小杨”的评论

您好,请教个问题,如果用在文件传输上,用于后台服务,
http的持久链接 和socket的长连接 他们的性能差别是否很大
持久连接也是长连接,只是持久连接处理几个http连接后会关闭。
杨小杨
杨小杨
您好,请教个问题,如果用在文件传输上,用于后台服务,
http的持久链接 和socket的长连接 他们的性能差别是否很大
xuange
xuange

引用来自“疙瘩”的评论

那啥,更新完了么,怎么没有六了

最近忙,过几天更新,后面还会写不少。
疙瘩
疙瘩
那啥,更新完了么,怎么没有六了
n
newnoder
HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP

题图:by @Olga Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header)和实体组成。大多数 HTTP 协议的...

承香墨影
2018/10/29
0
0
OSChina 技术周刊第二期

每周技术抢先看,总有你想要的! 移动开发 【软件】Google Android 官方培训课程中文版 【博客】iOS开发之Swift调用Objective-C代码 【博客】教你爱上Blocks(闭包)(iOS) 【博客】uick-co...

OSC编辑部
2014/09/28
12.1K
34
前端必知必会HTTP请求系列(二)简单一点的HTTP协议

http协议用户客户端和服务器之间的通信 http协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务器之间的通信。 那么问题来个如果两台服务器之间一台服务器向另一台服务器进行接口请求...

前端技术小哥
01/03
0
0
HTTP 协议中的并发限制及队首阻塞问题

串行连接 HTTP/0.9 和早期的 HTTP/1.0 协议对 HTTP 请求处理是串行化的。假如一个页面包含 3 个样式文件,同属于一个协议、域名、端口。那么,浏览器一共需要发起四次请求,并且每次只能打开...

ChikaraChan
2018/09/06
0
0
关于Http协议,你必须要知道的

Http协议请求--响应 引言 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP 是基于 TCP/IP 协议通信协议来传递...

浪里行舟
2018/02/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java 面试知识点笔记(十一)多线程与并发-原理 中篇

自适应自旋锁:(java6引入,jvm对锁的预测会越来越精准,jvm也会越来越聪明) 自选次数不再固定 由前一次在同一个锁上的自旋时间及锁拥有者的状态来决定(如果在同一个锁对象上自旋等待刚刚成...

断风格男丶
10分钟前
1
0
Rainbond 5.1.4发布,复杂微服务架构整体升级和回滚

Rainbond 5.1.4发布, 复杂微服务架构整体升级和回滚 今天为大家带来Rainbond 5.1系列第四个更新版本,本次版本更新的主要内容是复杂微服务架构应用整体升级和回滚,能实现复杂微服务架构的持...

好雨云帮
12分钟前
1
0
selenium Python定位元素和相关事件

场景 通过使用selenium python的API能够很好的定位html中的元素,并指挥鼠标进行点击。 定位元素 find_element_by_*方法 find_element_by_id(id_) : html标签中的id确定标签 find_element_b...

亚林瓜子
17分钟前
0
0
apache隐藏版本信息及设置网页缓存

实战:源码编译安装apache及调优技巧 实战环境: 生产环境中,部署了apache之后,我们应该从安全还是性能角度,在apache服务上线之前,对其做诸多的优化调试才行。 技巧1: 安装apache屏蔽a...

寰宇01
32分钟前
1
0
百度小程序第三方接入图片上传demo

代码是基于ThinkPHP 3.2的,其他语言请自行实现,PHP版本为5.6 /*** 图片上传* @Author Qianlong <87498106@qq.com>* @PersonSite http://dev.21ds.cn/*/ public function onlyUpl......

千龍
34分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部