HTTP概述HTTP是一种可以获取HTML等网络资源的协议(通信协议)。它是Web上数据交换的基础,是一种客户端-服务器协议,即请求通常由浏览器等接收方发起。一个完整的网页文档通常由不同的子文档组成,如文本、布局说明、图片、视频、脚本等。HTTP请求响应过程当我访问https://segmentfault.com/writ...时,浏览器会进行如下操作:DNS服务器会先映射域名,找到https://segmentfault.com所在的地址位于,然后HTTP客户端进程在端口80上发起到服务器https://segmentfault.com的TCP连接(端口80是HTTP的默认端口)。在客户端和服务器进程中都会有一个套接字连接到它。HTTP客户端通过其套接字向服务器发送HTTP请求消息。消息中请求/write的资源HTTP服务器通过其套接字接受消息,解析请求,并从其内存(RAM或磁盘)中检索对象https://segmentfault.com/writ...,然后进行封装将检索到的对象转化为HTTP响应消息,并通过套接字将其发送给客户端。HTTP服务器立即通知TCP断开TCP连接。实际上,它需要等到客户端收到响应报文后才断开TCP连接。HTTP客户端接收完响应报文后,TCP连接将被关闭。HTTP客户端从响应中提取消息中的HTML响应文件,检查HTML文件,然后循环遍历消息中的其他内部对象。检查完成后,HTTP客户端会通过显示将相应的资源呈现给用户。请求头请求头包含以下信息:响应头响应头包含以下信息:头字段Transfer-Encoding指定传输消息体时使用的编码方法。HTTP版本HTTP/1.1HTTP/1.1引入了更多的缓存控制策略,如Entity标签、If-Unmodified-Since、If-Match、If-None-Match等。HTTP/1.1允许范围请求,即添加到therequestheaderRangeheader,范围请求在传输大型媒体文件时非常有用,或者与文件下载的恢复功能一起使用时。HTTP/1.1请求报文和响应报文都必须包含Host头,以区分同一物理主机中不同虚拟主机的域名HTTP/1.1默认启用持久连接,可以在一个TCP连接上传输多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。HTTP/2.0的新二进制格式:HTTP/1.x解析是基于文本的。基于文本协议的分析存在天然缺陷,文本的表现形式多种多样,必须综合考虑多种场景。二进制则不同,只识别0和1的组合。基于这种考虑,HTTP/2.0的协议解析采用二进制格式,方便且功能强大。多路复用:HTTP/2.0支持多路复用,是HTTP/1.1长连接的升级版。多路复用是指一个*TCP连接中可以有多个流,即可以发送多个请求,服务器可以通过帧中的标识符知道该帧属于哪个流(即请求),并恢复它通过重新排序询问。多路复用允许同时发起多个请求。每个请求和对请求的响应不需要等待其他请求或响应,避免了队头阻塞问题。这样,某个请求任务耗费大量时间,不会影响其他连接的正常执行,大大提高了传输性能。不同流中的帧在同一个通道中传输:头压缩:HTTP/1.x请求和响应头包含大量信息,每个请求必须重复发送,HTTP/2.0使用编码器来减少传输所需的大小对于header,通信双方各自缓存一个headerfields表,这样既避免了重复header的传输,又减少了传输的大小。HTTP/3.0避免数据包阻塞:当多个流的数据包在一个TCP连接上传输时,如果一个流中的数据包传输出现问题,TCP需要等待数据包重传后才能继续传输数据其他流的数据包。而在基于UDP的QUIC协议中,不同流之间的数据传输是真正做到相互独立,互不干扰的。当某个流的数据包因为问题需要重传时,不会再传输其他流的数据包。产生影响。HTTP缓存是强缓存,Expires响应标头包含响应过期的日期/时间。无效日期,例如0,表示过去的日期,即资源已过期。如果在Cache-Control响应标头中设置了“max-age”或“s-max-age”指令,Expires标头将被忽略。expires:0negotiationcache,Last-Modified是一个时间戳,如果我们开启了negotiationcache,第一次请求时会和ResponseHeaders一起返回:每次请求都会判断时间戳是否发生变化。从而决定你是要304读取缓存还是返回给你最新的数据
