Http

Http协议属于五层网络层中的应用层,http下层是传输层,传输层常见的有tcp、udp协议。

http协议发展至今主要经历了以下几个阶段:

 

1、HTTP 0.9

http 0.9是最开始的http协议版本,只有一种GET请求方式,没有请求头。极为简单,每次请求时,都需要重新建立tcp连接,经历三次握手。

请求完成之后需要经历四次挥手断开连接,这样反复创建和断开tcp连接,极其耗费性能。并且仅支持纯文本内容。

2、HTTP 1.0

相比 0.9 来说增加了POST等命令、Header请求头、响应对象不止文本内容

3、HTTP 1.1

如今使用最多的http协议,相比之前的版本,有许多性能优化。比如持久化机制、管道机制、增加host和缓存功能。

对于最后一点,增加hos,多了一个host头域,表明一台服务器可以跑多个web服务。

4、HTTP 2.0

以多路复用、头部压缩、随时复位、服务器推流

 

对于http1.1来说,使用最广泛,我们重点学习1.1

http1.1的持久化机制,主要是靠增加了connection:keep-alive 的属性,这个表示每次http请求时,不必每次都进行tcp连接。如今的大多数浏览器都默认为keep-alive,当request headers中有

这个属性时,如果服务器识别出这个字段并且开启了keep-alive的话,那么response header中也会有connection:header。

但这个长连接并不是一直都保持连接的,有默认的keep-alive timeout或者连接次数的。当过了多长时间,或者请求多少次之后tcp连接会自动关闭。

问题一:那么在这个过程中存在一个可能性,在过期时间内,tcp这个连接如何保证是否还处于连接状态呢,那么就需要tcp的keep-alive了,tcp会每间隔一段时间就发送一次心跳检测包,来判断连接状态,如果对方没接收到,则将会一直重复发送,直到对方收到为止。如果对方一直未收到,那么会尝试默认的次数,最后还未成功则丢弃次tcp连接。

问题二: 这个连接次数,是怎么判断的呢?或者说如何判断每次请求完成的呢。

 

posted @ 2019-09-24 23:18  淡淡的椰子味  阅读(201)  评论(0)    收藏  举报