什么是HTTP
HTTP:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。
HTTP长连接和短连接
在HTTP/1.0阶段默认使用短连接,也就是说,客户端和服务器每进行一次操作,就建立一次链接,任务解说就中断连接。当客户端浏览器访问的某个HTML或其他类型的web页中包含有其他的web资源,没遇到一个web资源,浏览器就会建立一个HTTP会话。
而从HTTP/1.1开始,默认使用长链接,泳衣保持连接特性。使用长链接的HTTP协议会在响应头中添加:Connection:keep-alive
使用长链接的情况下,当一个网页打开后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这条已建立的连接。
注意:keep-alive不会永久保持连接,会有一个时长,可在不同服务器中设置保持连接的时间。
长链接和短连接的优点和缺点
长链接:
- 优点:省去较多TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适合使用长链接。
- 缺点:存活功能的探测周期太长,只探测TCP连接的存活,遇到恶意的连接时,保活功能就不够使了。还有就是在长链接的场景下,client客户端一般不会主动关闭他们之间的连接,client与server端之间连接如果一致不关闭,随着客户端连接越来越多,server会保持过多连接,之中导致server顶不住这么多连接。这个时候server会采取一些措施减少连接,比如关闭一些长时间没有请求发生的连接,如果条件允许,可以以客户端机器为颗粒度,限制每个客户端的最大长连接数。
短连接:
- 优点:对于服务器来说,管理简单,存在的连接都是有效的连接,不用额外的控制手段。
- 缺点:若客户端请求过于频繁,将在TCP的建立和关闭上浪费资源和事时间。
长连接和短连接具体场景采用具体策略,没有十全十美,只有合适。
HTTP发展历程
HTTP基本优化
影响一个HTTP网络请求的因素主要有两个:带宽和延迟。
带宽:是指在单位时间内能传输的数据量,和高速公路类似,带宽越大,就好比高速公路的车道越多,通行能力就越强。在拨号上网阶段带宽对网速的影响比较大,但在现在网络建设已经使得带宽取得了极大的提升,不必再担心带宽问题而影响网上。
延迟:
- 浏览器阻塞:浏览器对于一个域名,同时只能有4个连接(根据浏览器内核不同最大连接数不同),超过浏览器最大连接数限制,后续的请求就会被阻塞。
- DNS查询:浏览器需要知道目标服务器的IP才能建立连接。将域名解析为IP地址,这个系统就是DNS,这个通常可以利用DNS缓存来减少时间。
- 建立连接:HTTP是基于TCP协议的,浏览器最快也要在第三次握手的时候才能捎带HTTP报文,达到真正的建立连接,但是这些连接无复用,会导致每次请求都经历三次握手和慢启动。
HTTPS与HTTP的一些区别
- HTTPS协议需要到CA申请证书,大部分需要交费
- HTTP是运行在TCP之上的,HTTPS试运行在SSL/TLS之上,而SSL/TLS运行在TCP之上,所有传输的数据内部都是经过加密的
- HTTP默认端口号是80,HTTPS默认端口号是443
HTTPS原理解析
对于HTTP协议,客户发出的请求很容易被黑客拦截,如果黑客可以冒充服务器给客户端返回一些不正确的信息。
所以 HTTP 传输面临的风险有:
(1) 窃听风险:黑客可以获知通信内容。
(2) 篡改风险:黑客可以修改通信内容。
(3) 冒充风险:黑客可以冒充他人身份参与通信。
为了防止这种现象的发生,HTTPS产生。
访问流程:
- 客户端向服务器发起请求
- 服务器将数字证书(公钥)发送给客户端
- 客户端对发来的证书进行验证,如果无效,则停止HTTPS请求,如果有效,随机生成自己的私钥,然后使用服务器发过来的公钥对私钥进行加密,生成客户端公钥
- 客户端将生成的公钥传送给服务器,使得服务器得到自己的公钥
- 这样客户端和服务器就都有了对方的公钥,公钥用来加密传输的数据,私钥用来解析数据
图片来自:HTTPS请求的整个过程的详细分析
HTTP2.0和SPDY
SPDY
SPDY(读作“SPeeDY”)是Google开发的基于TCP的会话层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。采取多路复用,通过对各请求流共享一个TCP连接的方式,解决了浏览器阻塞的问题,降低了延迟同时提高了带宽的利用率。并且,SPDY是基于HTTPS的加密协议传输,大大提高了数据传输的可靠性。
SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议,同时可以使用已有的SSL功能。
HTTP/2.0
HTTP/2.0可以说是SPDY的升级版,区别在于:
- HTTP/2.0支持铭文HTTP传输,而SPDY强制使用HTTPS
- HTTP/2.0消息头的压缩算法采用HPACK,而SPDY采用的是DEFLATE
为什么要使用头部压缩
嘉定一个页面有100个资源需要加载(这个数量对于今天的web而言还是保守的),而每一次请求都有1kb的消息头,则至少要消耗100kb来获取消息头。HTTP/2.0可以维护一字典,差量更新HTTP头部,大大降低因头部传输产生的流量。
HTTP/2.0的多路复用和HTTP/1.X的长链接的区别
HTTP/1.*:一次请求-响应,建立一个连接,用完关闭,每一个请求都要建立一个连接。
HTTP/1.1:若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行的机会,一旦请求超时,后续请求只能被阻塞。
HTTP/2:多个请求可同时在一个连接上并行执行,某个请求任务好事严重,不会影响其他连接的正常执行。
图片来源:微信公众号:code小生
为什么使用HTTP2.0
HTTP性能优化的关键,不在于提高带宽,而是低延迟,比如HTTP/2.0一条TCP连接就可以有多个请求,可以更有效的使用TCP连接,从而减少因浏览器阻塞带来的延迟。