1.1 初始
HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。
补充: 无状态协议,但是也会有方法让他带上状态
1.2 协议分析
1.2.1 发展历程
- HTTP 0.9: (1991),只支持GET方法,没有请求头和响应头,只能传输HTML格式的文本。单行协议
- HTTP 1.0: (1996),增加了POST和HEAD方法,引入了请求头和响应头,有了状态码,支持多种类型的数据传输。
- HTTP 1.1: (1999),是目前使用最广泛的版本,增加了PUT, DELETE, OPTIONS等方法,支持持久连接、链接复用和分块传输编码,引入了缓存机制和内容协商机制。
- HTTP 2: (2015),是对HTTP 1.1的重大改进,采用了二进制格式而不是文本格式,支持多路复用和服务器推送,提高了传输效率和安全性。
- HTTP 3: (2020),是对HTTP 2的进一步优化,基于QUIC协议而不是TCP协议,解决了TCP的队头阻塞问题,提升了网络延迟和拥塞控制。
1.2.2 协议分析(以1.1为例子)
HTTP报文是由客户端或服务器发送的数据块,分为请求报文和响应报文两种类型。每个报文都由三部分组成:起始行、头部字段和主体部分。
起始行
- 起始行是报文的第一行,用于描述报文的基本信息。请求报文的起始行包含以下三个部分:
-
Method: 请求方法,表示客户端想要对服务器资源执行的操作。常见的请求方法有GET, POST, HEAD, PUT, DELETE, OPTIONS等,如下:
补充:Method中不会修改服务器数据的方法我们称其是安全的(Safe),例如:GET,HEAD, OPTIONS;同样的请求多次执行的效果是一样的,服务器的状态也是一样的,这样的请求我们称其为是幂等的(Idempotent),可见,所有安全的方法都是幂等的,例如:GET,HEAD, OPTIONS,PUT, DELETE
Request-URI: 请求统一资源标识符,表示客户端想要访问的服务器资源的地址。例如www.baidu.com/search.html…HTTP-Version: 请求使用的HTTP版本号。例如HTTP/1.1。
- 响应报文的起始行包含以下三个部分:
HTTP-Version: 响应使用的HTTP版本号。例如HTTP/1.1。Status-Code: 响应状态码,表示服务器对请求的处理结果。常见的状态码有200(成功), 404(未找到), 500(服务器错误)等,如下图:
Reason-Phrase: 响应原因短语,表示状态码的简短描述。例如OK, Not Found, Internal Server Error等。
头部字段
头部字段是报文中的一系列键值对,用于描述报文的元数据信息。每个头部字段由一个字段名和一个字段值组成,中间用冒号分隔。头部字段可以分为通用头部字段、请求头部字段、响应头部字段和实体头部字段四种类型。
-
常用的请求头
- Accept :接收类型,表示浏览器支持的MIME类型
- Content-Type : 客户端发送出去实体内容的类型
- Cache-Control : 指定请求和响应遵循的缓存机制, 如no-cache
- If-Modified-Since :对应服务器的Last-Modified,用匹配看文件是否变动,只能精确到1s之内
- Expires : 缓存控制,在这个时间内不会请求,直接使用缓存
- Max-age : 代笔资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存
- If-None-Match : 对应服务端的ETag,用来匹配文件内容是否改变(非常精确)
- Cookie :是用来在客户端和服务器之间传递会话信息的一种机制。当客户端(通常是浏览器)向服务器发送请求时,可以通过请求头中的 Cookie 字段携带会话信息。
- Referer : 该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址,csrf拦截常用)
- Origin : 最初的请求是从哪里发起的(只会精确到端口),Origin比Referer更尊重隐私
- User-Agent : 用户客户端的一些必要信息,如UA头部等等
-
常用的响应头
- Content-Type : 服务器返回id实体内容的类型
- Cache-Control :指定请求和响应遵循的缓存机制,如
no-cache - Last-Modefied :请求资源的最后修改时间
- Expires :啥时候文件过期不再缓存
- Max-age :客户端的本地资源应该缓存多少秒,开启了Cache-Control后有效
- ETag :资源的特定版本的标识符,类似于指纹
- Set-Cookie : 设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
- Server :服务器的一些相关信息
- Access-Control-Allow-Origin :服务器允许的请求Origin头部(如*)
主体部分
主体部分(Body)是可选的,通常用于携带请求或响应的实际数据。它位于请求头(Request Header)或响应头(Response Header)之后,由空行(CRLF)分隔开。
1.3 总结
HTTP(Hypertext Transfer Protocol)是一种用于在网络上传输超文本和其他资源的协议。它是客户端和服务器之间的通信规则,基于请求-响应模型。HTTP使用URL作为资源的标识符,并通过请求方法(如GET、POST)来执行相应的操作。它使用文本格式的请求和响应,通过头部信息传递元数据,可支持状态管理和缓存控制。HTTP是无状态的,每个请求都是独立的,不保留状态。它简单、灵活,被广泛用于万维网上的信息传输。学习http对我们的前端学习道路有很大的用处。