@@ -9,8 +9,14 @@ HTTP与HTTPS的区别
99
1010- 1997年发布HTTP/1.1: 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码。
1111
12+ 长连接是指的TCP连接,也就是说复用的是TCP连接。即长连接情况下,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗。
13+
14+ 此外,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在header当中进行设置的,也就是所谓的超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。
15+
1216- 2015年发布HTTP/2:多路复用、服务器推送、头信息压缩、二进制协议等。
1317
18+
19+
1420![ ] ( https://raw.githubusercontent.com/CharonChui/Pictures/master/http1.1vs2.jpg )
1521
1622多路复用:通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多留并行而不是依赖建立多个TCP连接。
@@ -27,6 +33,25 @@ HTTP与HTTPS的区别
2733
2834- 传输速度快
2935
36+
37+
38+ ### HTTP请求响应过程
39+
40+ 你是不是很好奇,当你在浏览器中输入网址后,到底发生了什么事情?你想要的内容是如何展现出来的?让我们通过一个例子来探讨一下,我们假设访问的 URL 地址为 ` http://www.someSchool.edu/someDepartment/home.index ` ,当我们输入网址并点击回车时,浏览器内部会进行如下操作
41+
42+ - DNS服务器会首先进行域名的映射,找到访问` www.someSchool.edu ` 所在的地址,然后HTTP 客户端进程在 80 端口发起一个到服务器 ` www.someSchool.edu ` 的 TCP 连接(80 端口是 HTTP 的默认端口)。在客户和服务器进程中都会有一个` 套接字 ` 与其相连。
43+ - HTTP 客户端通过它的套接字向服务器发送一个 HTTP 请求报文。该报文中包含了路径 ` someDepartment/home.index ` 的资源,我们后面会详细讨论 HTTP 请求报文。
44+ - HTTP 服务器通过它的套接字接受该报文,进行请求的解析工作,并从其` 存储器(RAM 或磁盘) ` 中检索出对象 [ www.someSchool.edu/someDepartment/home.index,然后把检索出来的对象进行封装,封装到 ] ( http://www.someSchool.edu/someDepartment/home.index,然后把检索出来的对象进行封装,封装到 ) HTTP 响应报文中,并通过套接字向客户进行发送。
45+ - HTTP 服务器随即通知 TCP 断开 TCP 连接,实际上是需要等到客户接受完响应报文后才会断开 TCP 连接。
46+ - HTTP 客户端接受完响应报文后,TCP 连接会关闭。HTTP 客户端从响应中提取出报文中是一个 HTML 响应文件,并检查该 HTML 文件,然后循环检查报文中其他内部对象。
47+ - 检查完成后,HTTP 客户端会把对应的资源通过显示器呈现给用户。
48+
49+ 至此,键入网址再按下回车的全过程就结束了。上述过程描述的是一种简单的` 请求-响应 ` 全过程,真实的请求-响应情况可能要比上面描述的过程复杂很多。
50+
51+
52+
53+
54+
3055## HTTPS
3156
3257Https并非是应用层的一种新协议。只是http通信接口部分用SSL(安全套接字层)和TLS(安全传输层协议)代替而已。即添加了加密及认证机制的HTTP称为HTTPS(HTTP Secure).
@@ -135,7 +160,21 @@ HTTP + 加密 + 认证 + 完整性保护 = HTTPS
135160
136161
137162
163+ ### Https 请求慢的解决办法
164+
165+ 1 . 不通过DNS解析,直接访问IP
166+
167+ 2 . 解决连接无法复用
168+
169+ http/1.0协议头里可以设置Connection: Keep-Alive 或者Connection: Close ,选择是否允许在一定时间内复用连接(时间可由服务器控制)。但是这对App端的请求成效不大,因为App端的请求比较分散且时间跨度相对较大。
170+
171+ 方案1.基于tcp的长连接 (主要) 移动端建立一条自己的长链接通道,通道的实现是基于tcp协议。基于tcp的socket编程技术难度相对复杂很多,而且需要自己定制协议。但信息的上报和推送变得更及时,请求量爆发的时间点还能减轻服务器压力(避免频繁创建和销毁连接)
172+
173+ 方案2.http long-polling 客户端在初始状态发送一个polling请求到服务器,服务器并不会马上返回业务数据,而是等待有新的业务数据产生的时候再返回,所以链接会一直被保持。一但结束当前连接,马上又会发送一个新的polling请求,如此反复,保证一个连接被保持。 存在问题: 1)增加了服务器的压力 2)网络环境复杂场景下,需要考虑怎么重建健康的连接通道 3)polling的方式稳定性不好 4)polling的response可能被中间代理cache住 ……
174+
175+ 方案3.http streaming 和long-polling不同的是,streaming方式通过再server response的头部增加“Transfer Encoding: chuncked ”来告诉客户端后续还有新的数据到来 存在问题: 1)有些代理服务器会等待服务器的response结束之后才将结果推送给请求客户端。streaming不会结束response 2)业务数据无法按照请求分割 ……
138176
177+ 方案4.web socket 和传统的tcp socket相似,基于tcp协议,提供双向的数据通道。它的优势是提供了message的概念,比基于字节流的tcp socket使用更简单。技术较新,不是所有浏览器都提供了支持。
139178
140179
141180
0 commit comments