HTTP:HypertextTransferProtocol,用于在网络上传输HTML超文本内容。http基于TCP协议。客户端首先根据IP地址、端口号和建立过程中的TCP协议3次握手与服务器建立TCP连接。建好后,先发送一个GET请求行信息,获取数据。服务器接收到请求,读取相应的文件,并将数据以ASCII字符流的形式返回给客户端。文档传输完成后,连接断开。HTTP1.1TCP是为单连接而设计的。改进持久连接:每次HTTP通信,都要建立TCP连接,传输HTTP数据,断开TCP连接。由于单个页面上的文件和图片越来越多,每一个都需要很多步骤,开销太大。持久连接:多个HTTP请求可以在一个TCP上传输,只要浏览器或服务器没有明确断开连接,TCP连接就会一直保持。HTTP管道:持久连接虽然可以减少TCP建立和断开的次数,但是需要等待上一个返回,然后再进行下一个。如果一个请求还没有返回,那么后面的所有请求都会被阻塞,这就是队头阻塞问题。HTTP1.1尝试向服务器批量提交多个HTTP请求,但服务器仍然要按顺序返回请求。提供虚拟主机支持:之前每个域名绑定一个唯一的IP地址,所以一台服务器只支持一个域名。但是虚拟主机的开发需要将多个虚拟主机绑定到一个物理主机上。每个虚拟主机都有自己的域名并共享一个IP地址。HTTP1.1的请求头中增加了Host来表示当前的域名地址,这样服务器就可以根据不同的Host值进行不同的处理。每个域名最多同时维护6个TCP长连接,利用CDN实现域名分片。ClientCookieandSecurityMechanism:服务端引入cookie机制和安全机制作为处理头。HTTP1.1带宽利用率不理想:TCP慢启动:TCP连接建立后,发送数据逐渐变快,但初始html、css、js文件耗时较长,延迟第一次渲染打开同时多个TCP连接竞争一个固定的带宽。当带宽不足时,发送或接收数据会变慢,这可能会影响关键资源的下载队头阻塞问题。HTTP2多路复用HTTP2只使用一个TCP长连接为一个域名传输数据。下载过程只需要一次慢启动,也避免了多个TCP争抢带宽。浏览器准备的数据(请求头、请求行)经过二进制分帧层处理,转换成带有请求ID号的帧,通过协议栈发送给服务器。服务器收到后,会将具有相同ID的帧组合成一个完整的请求信息服务器对请求进行处理,并将处理后的响应行、响应头和响应体发送给二进制成帧层。同样,二进制分帧层将响应数据转换成带有请求ID号的帧,通过协议栈发送给浏览器,浏览器收到响应后,根据ID号将帧的数据提交给相应的请求.其他特点:可以设置请求的优先级。在发送请求时,标记请求的优先级,以便服务器收到请求后,优先处理优先级高的请求。服务器推送,除了可以设置优先级,还可以提前向浏览器推送数据。例如,当用户请求一个HTML页面时,服务器知道HTML页面会引用几个重要的JavaScript文件和CSS文件,那么在收到HTML请求后,会将要用到的CSS文件和JavaScript文件发送给一起浏览器。这样,浏览器在解析完HTML文件后,就可以直接得到需要的CSS文件和JavaScript文件,这对首次打开页面的速度起到了至关重要的作用。头压缩,请求头和响应头压缩,提高传输效率HTTP2缺??陷:TCP队列头阻塞,HTTP2仍然基于TCP协议,TCP最初是为单连接设计的。您可以将TCP连接视为两台计算机之间的虚拟管道。计算机的一端将要传输的数据按顺序放入管道,最终的数据会以同样的顺序出现在管道的另一端。如果在数据传输过程中由于网络故障或其他原因导致数据包丢失,则整个TCP连接将被挂起,等待丢失数据包的重传。在TCP传输过程中,由于丢失单个数据包而导致的阻塞在TCP上称为队头阻塞。TCP连接建立延时:TCP的握手过程HTTP3HTTP3是基于UDP协议实现类似TCP的多数据流,传输可靠性等功能,调用QUIC协议=TCP+HTTP2复用+TLS加密实现类似TCP的流量控制和传输可靠性功能。集成TLS加密。最重要的一点是减少握手时花费的RTT数。在HTTP/2中实现多路复用功能。实现了快速握手功能。两个跨域的url具有相同的协议、域名和端口,称为url同源。默认情况下,浏览器可以在两个相同的源之间访问资源和操作DOM。不同的来源受到安全策略的限制。DOM层级:限制JS对不同来源的读写操作,仅限于当前DOM对象。同源可以通过window.opener控制页面中的DOM数据层级:它限制了不同源站点读取当前站点的cookie、indexDB、localStorage等数据。网络级别:限制XMLHttpRequest将站点数据发送到不同的源。站点页面可以嵌入第三方资源。CSP让服务器决定浏览器可以添加哪些资源,让服务器决定浏览器是否可以执行嵌入式JS,减少xcss跨域资源共享和跨文档消息机制,引入CORS跨域资源共享,跨域接入跨文档消息机制,window.postMessage与不同源DOM通信
