.net做网站开发,网站托管维护方案,dedecms导航网站模板,网站怎么不花钱做排名 知乎前言
HTTP协议是一种用于在网络上传输信息的应用层协议#xff0c;它为万维网的运作提供了基础。 最早的版本是HTTP/0.9#xff0c;它是HTTP协议的第一个版本#xff0c;诞生于1991年#xff0c;其设计初衷是为了在计算机之间传输简单的超文本文档#xff0c;即HTML。 在…前言
HTTP协议是一种用于在网络上传输信息的应用层协议它为万维网的运作提供了基础。 最早的版本是HTTP/0.9它是HTTP协议的第一个版本诞生于1991年其设计初衷是为了在计算机之间传输简单的超文本文档即HTML。 在HTTP2之前HTTP一直都是基于文本的协议足够的简单、良好的可读性是HTTP协议能取得如此成功的重要原因之一。 然而随着互联网的发展和网页内容的复杂性增加基于文本的HTTP协议逐渐暴露出一些性能上的限制。为了解决这些问题才有了HTTP2。
HTTP协议
版本发布年份主要特点HTTP 0.91991年最初版本用于传输超文本HTML文档HTTP 1.01996年支持多种类型的数据和HTTP头部HTTP 1.11997年长连接、管道化、缓存机制提高了性能和效率HTTP/22015年二进制协议、多路复用、头部压缩、服务器推送、流量控制
HTTP/0.9
HTTP/0.9是最早的HTTP协议版本于1991年发布。它非常简单典型的请求-响应模型没有定义任何HTTP头部信息只支持传输HTML。它的主要特点如下
只支持GET无HTTP头部纯文本协议
请求示例
GET /index.html响应示例
htmlbodycontent/body
/htmlHTTP/1.0
HTTP/1.0是HTTP协议的一个重要版本于1996年发布。 HTTP/1.0相对于HTTP/0.9增加了以下内容和特性
新增POST、HEAD请求方法引入请求头信息引入响应状态码如200表示成功
请求示例
GET /path/file.html HTTP/1.0
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0响应示例
HTTP/1.0 200 OK
Date: Fri, 08 Jul 2023 18:30:00 GMT
Server: Apache/2.4.7 (Ubuntu)
Content-Length: 256
Content-Type: text/htmlhtml
body...
/body
/htmlHTTP/1.1
HTTP/1.1相对于HTTP/1.0增加了以下内容和特性
持久连接HTTP/1.1默认使用持久连接即在单个TCP连接上可以发送多个请求和获得多个响应。这样可以减少建立和关闭连接的开销提高性能。管道化在一个连接上可以同时发送多个请求而无需等待每个请求的响应。服务器也可以按照请求的顺序回复响应进一步提高了性能。分块传输编码允许服务器将响应分成多个部分进行传输这对于传输大文件或者流式数据非常有用。Host头部允许在一个物理服务器上托管多个域名或多个虚拟主机服务器根据不同的 Host 头部字段来选择不同的网站或虚拟主机进行请求处理。
HTTP2
为什么命名不是HTTP/1.2因为HTTP2协议关于数据传输的部分改动很大从一个基于文本的协议升级到了二进制协议属于是大版本的升级。 相较于HTTP/1.1HTTP2的特点是
二进制分帧消息从一个文本协议升级到了二进制协议HTTP2把消息切分成多个二进制帧Frame发送为了区分不同的消息帧有很多类型例如传输请求头的HEADERS帧传输消息体的DATA帧等。多路复用HTTP2在单个连接上可以同时开辟多个逻辑上的流Stream消息是基于Stream发送的意味着请求和响应可以并发处理。头部压缩之前是消息体可以压缩在HTTP2上消息头也支持压缩了。服务端推送不止是客户端请求服务端现在服务端也可以主动推送数据给客户端了。流量控制HTTP1因为在单个连接上请求-响应都是串行的因此直接依赖于底层TCP的流控就好了。HTTP2有了多路复用单个连接上可以同时有多个Stream此时必须要实现更精细化的流量控制。
HTTP2会把消息拆分成多个Frame发送这些Frame是基于二进制传输的无法直接拆看必须使用对应的工具或三方库来处理这些Frame。 关于HTTP2的各种Frame的格式以及其它介绍可以查看这篇文档https://httpwg.org/specs/rfc9113.html#FrameTypes