http 超文本传输协议
http 协议是基于Tcp协议的;
影响一个http请求的因素主要有两个:带宽、延迟;
1 带宽:
2 延迟:1、DNS查询:当发起一个请求时,要先建立tcp连接;要建立Tcp连接必须知道服务器Ip地址;通过DNS查询(DNS系统)对URL中域名进行解析;可以通过使用
DNS缓存来减少解析时间;
2 、浏览器阻塞:浏览器对于同一个域名·,同时只能有4个连接(TCP通道);浏览器不同,限制也不一样;超过限制;后续请求将会被阻塞;
这也是为啥同一站点有多个静态资源CDN域名的原因;变相解决了一个域名请求限制的问题;http1.0
3、建立连接(TCP):建立连接是需要三次握手的,费时;
http1.0和http1.1区别;
1 缓存处理:http1.0中在第一次响应头header中增加了Expriess、last-modified(if-modified-since)来处理缓存;htpp1.1中新增了Etags(if-none -match)
来处理缓存;
2 Host头处理:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
3 长连接:http1.1中一个tcp通过 在HTTP1.1中默认开启Connection: keep-alive,在一个连接中可以串行方式的传递多个请求、响应;来减少建立连接和关闭连接带来的延迟;
但是会存在线头阻塞问题,即如果上一个请求超时;下一个请求也会一直等待;
https 和 http区别:
http运行在tcp之上的;所有传输的内容是都是明文;https运行在SSL/TSL之上的;而SSL/TSL是运行在TCP之上的;所有传输内容都是密文的;
两者采用的是不一样的连接方式;端口也不一样;http是80;https是433;
https需要申请CA证书;付费;
http2.0;
多路复用:http2.0新增多路复用功能;指一个连接(tcp通道)可以并行发起多个请求;
请求优先级:给重要的请求设置较高的优先级;比如加载首页内容;先是首页内容的请求,然后是静态资源的加载;js文件等;
header压缩:http1.1中很多header都是重复的;
服务端推送:就是在请求一些文件时,在响应时,将一些相关文件一并推送出去;这样就不用再次请求相关文件;直接缓存读取;
服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通
过服务端推送的方式可以极大地提升速度。
http2.0的多路复用补充:
tcp连接存在慢启动的;当建立连接之初;数据传输是缓慢的,存在自我调节的一种功能;当时间变长;相当于确定这个通道稳固了;就开始快速的传递数据;
但是一旦通道销毁;断开连接;下一个请求开始;又会经历慢启动的过程;费时;http2.0的多路复用则解决了这个问题
注意:
http2.0 是可以支持明文传输的;也就是不加SSL/TSL;但是现在主流浏览器chrome,火狐等只支持基于TSL部署的http2.0协议;所以要升级到http2.0;还得先进行TSL部署;才会有好的兼容性
原文:https://www.cnblogs.com/chen-da-da/p/15229472.html