目录
Http1.0与Http1.1的区别
Http1.0 Http1.1 短连接,浏览器和服务器保存短暂连接,浏览器的每一次请求都需要建立一个TCP连接,服务器完成请求处理后TCP连接立即断开,也不跟踪每个每个客户端过来的请求。持久连接(Http keep-alive),即只要任意一端没有明确表示连接断开,就一直保持TCP连接状态。
管线化:发送请求无需等待响应,直接在发送下一个请求。
每台主机只有一个IP地址,因此URL中没有传递主机名(hostname)。
而虚拟技术发展,一台物理服务器上多个虚拟主机,共享一个IP地址。
请求消息和响应消息都支持Host字段,并且请求消息没有Host偷鱼会报告错误(404 Bad Request)。此外,服务器接收以绝对路径标记的资源请求。
新状态码100,实现节约带宽。先发送只带头域请求试探服务器是否还接受请求,接收则返回100状态码,客户端发送完整带实体的请求;反之,返回状态码401。 分块传输编码,即发送方将消息分为任意大小的块,在发送时对块的大小使用16进制进行备注,结束时使用0作为标识。目的只缓冲消息的一个片段,避免整个消息带来的过载。 在1.0的基础上加入了一些 cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。Http2.0与Http3.0的区别
Http2.0 Http3.0二进制传输。即请求和响应数据分隔为更小的帧,使用二进制编码。
同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
基于 UDP 协议的 QUIC 协议
多路复用技术,只通过一个 TCP 连接就可以传输所有的请求数据。
同个域名只需要占用一个TCP连接,使用一个连接并行发送多个请求和响应,消除了因多个TCP连接而带来的延时和内存消耗。
并行交错地发送多个请求,请求间互不干扰。
并行交错地发送多个响应,响应间互不干扰。
每个请求都可以带一个31bit的优先值,客户端和服务端就可以处理不同的流时采用不同的策略,以最优的方式发送流、消息和帧。
让不同的流之间真正的实现相互独立传输,互不干扰 Header压缩,HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;
首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;
每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值
0RTT建连,缓存当前会话的上下文,在下次恢复会话的时候,只需要将之前的缓存传递给服务端验证通过就可以进行传输。Server Push,即服务端能通过push的方式将客户端需要的内容预先推送过去,也叫“cache push”。服务器不能随便将第三方资源推送给客户端,而必须是经过双方确认才行。