一、初识
1.概念
HTTP(Hyper Text Transfer Protocol),超文本传输协议,是一种用于在Web上进行数据传输的协议。属于应用层的协议,是基于TCP的协议。
2.特点
它简单可扩展,基于请求和响应,且无状态(无状态即没有记忆能力,每个请求都是独立的)。
二、协议分析
1.持续发展
- HTTP/0.9: HTTP/0.9是最早的HTTP版本,只支持GET方法,且没有头部信息,响应只有HTML文档。
- HTTP/1.0: HTTP/1.0引入了一些重要的特性,如请求方法的扩展、状态码、头部字段Header和缓存等功能。它支持多种请求方法,如GET、POST等,它支持多种文档类型。
- HTTP/1.1: HTTP/1.1引入了持久连接、管道化、虚拟主机、分块传输编码和缓存控制等重要特性。持久连接允许多个请求和响应在同一个TCP连接上进行,减少了建立和关闭连接的开销。管道化允许在一个连接上同时发送多个请求,提高了性能。HTTP/1.1还引入了更多的头部字段和新的请求方法,如PUT、DELETE等。
- HTTP/2: HTTP/2引入了多路复用、头部压缩、服务器推送等新特性。多路复用允许多个请求/响应在一个连接上并发进行,提高了性能。头部压缩减少了传输的开销,服务器推送允许服务器在客户端请求之前主动向客户端发送资源。HTTP/2的目标是提高性能和安全性。
2.报文分析
各种Method
状态码
常用请求头
常用响应头
缓存
-
强缓存(Expires和Cache-Control):通过设置Expires或Cache-Control响应头来控制缓存的有效期。如果缓存副本仍然有效,客户端可以直接从本地缓存获取资源。
- Expires:指定一个绝对过期时间,由服务器返回,但可能受限于客户端和服务器之间时钟的不同。
- Cache-Control:指定缓存的最大有效时间,以秒为单位。
-
协商缓存(Last-Modified和ETag):通过在请求头中发送与缓存相关的条件信息,与服务器进行协商来决定是否使用缓存副本。
- Last-Modified:服务器在响应头中返回资源的最后修改时间。客户端在下一次请求时,将该值放在If-Modified-Since请求头中发送给服务器,如果资源未修改,服务器返回304 Not Modified状态码,客户端可以使用本地缓存副本。
- ETag:服务器在响应头中返回资源的唯一标识符。客户端在下一次请求时,将该值放在If-None-Match请求头中发送给服务器,如果资源未修改,服务器返回304 Not Modified状态码,客户端可以使用本地缓存副本。
cookie
三、场景分析
静态资源
- 打开 chrome
- 输入www.toutiao.com
- 打开控制台
- 右键 -> 检查
- F12
- 切换到 network
- 静态资源
- 登陆
- 缓存策略是怎样的?
- 强缓存
- Cache-control:一年
登陆
- 用户在登录页面输入用户名和密码,并点击登录按钮。
- 客户端(通常是浏览器)将用户名和密码以POST请求的形式发送到服务器的登录接口。
- 服务器接收到登录请求后,验证用户名和密码的正确性。
- 如果用户名和密码验证通过,服务器会生成一个用于标识该用户身份的令牌(例如加密的JWT)。
- 服务器将该令牌作为响应返回给客户端,并存储在客户端的Cookie或本地存储中。
- 客户端在后续的请求中,会在请求头中带上这个令牌,以便服务器验证用户的身份。
- 服务器在每次请求中都会验证令牌的有效性和权限,以确保用户已经通过了身份验证。