课程链接:HTTP 协议的应用场景分析 - 掘金
缓存策略
缓存策略是为了加快加载速度、减少服务器压力的设置。
常见场景:
- 静态资源(CSS/JS/图片) :让文件能缓存一段时间,不用每次都下载。
- 动态数据(API) :确保拿到最新数据,但也可以减少不必要的请求。
在Google Chrome进入www.jd.com/
右键检查,进入网络面板
点击刷新,可以看到面板列出了所有加载的资源
点击某个资源,可以查看它的详细信息
某个资源的详细信息
标头
Request Headers(请求头):显示浏览器向服务器发送的请求信息,如User-Agent
Response Headers(响应头):显示服务器返回的信息,如缓存控制Cache-Control
常规内容
1️⃣ 请求网址
文件放在京东的静态资源服务器上,由 storage.360buyimg.com 提供
/static/css/index.chunk.css 是 CSS 文件的路径
2️⃣ 请求方法:GET
浏览器从服务器获取这个文件
3️⃣ 状态代码:304 Not Modified
浏览器告诉你:
服务器确认这个文件没有改变,缓存的版本可以直接使用,不需要下载新的文件(通过 ETag 或 Last-Modified 等信息判断)
4️⃣ 远程地址:58.251.127.109:443
- IP 地址
58.251.127.109: 请求资源所在的具体服务器位置
域名是为了让人更容易记住,请求过程中是通过 IP 地址来定位服务器
- 端口号
443: 请求使用的是 HTTPS 协议,端口号 443 是 HTTPS 的默认端口。通过 HTTPS,浏览器和服务器之间的通信加密,保护用户数据安全
5️⃣ 引荐来源网址政策:strict-origin-when-cross-origin
引荐来源网址(Referer)
当你从A网页点击一个链接,跳到B网页,浏览器会告诉B网页:
“用户是从A网页来的。”
这个信息就会存储在 Referer 字段中
为保护用户隐私,避免跨域泄露敏感的完整来源地址,使用政策strict-origin-when-cross-origin
- 同源请求:
如果两个地址的域名、协议和端口都相同。比如从 www.jd.com 跳转到 www.jd.com/static.css ,会发送完整的引荐来源 URL。 - 跨域请求:
如果目标地址和来源地址的域名、协议或端口不同。比如从 www.jd.com 跳转到 storage.360buyimg.com ,只发送来源的域名部分,比如Referer: https://www.jd.com
响应标头
重要字段解释
缓存相关
cache-control(缓存控制)
-
定义了资源在缓存中的有效期,单位是秒。
-
max-age=300 表示资源可以在 300 秒内不向服务器发送请求,直接从缓存中加载。
-
静态资源(如 JS/CSS/图片)通常设置较长的缓存时间。
etag(资源标识)
-
服务器给资源生成的唯一标识,类似资源的 "身份证"。它可以用来判断资源是否发生变化。
-
浏览器加载资源时会发送
If-None-Match请求头,带上上次的 etag 值如果服务器检测到资源没变,会返回
304 Not Modified,并告诉浏览器继续用缓存的版本。
x-cache-lookup(缓存命中)
- 如果你在 300 秒内重新访问某个 CSS 文件,浏览器可能会显示 Cache Hit,资源直接从缓存中加载,而不再请求服务器。
跨域相关
access-control-allow-origin(跨域资源共享)
*表示任何网站都可以访问这个资源。- 如果没有这个字段,浏览器会拦截跨域请求。
性能调试
timing-allow-origin(允许测时间)
- 指定哪些来源可以获取资源的性能数据(通过浏览器的 Performance API)
- 这个字段帮助前端调试资源加载性能。
请求优化
vary(条件缓存)
-
告诉浏览器缓存应该根据什么条件变化。这里表示根据请求的
Accept-Encoding头缓存不同版本的资源。 -
如果客户端支持 gzip 压缩,服务器返回 gzip 版本。
如果客户端不支持,返回未压缩版本。
缓存需要分别存储 gzip 和非 gzip 版本。
请求标头
重要字段解释
基础字段
:authority(请求的主机名)
- 表示你在找谁提供服务,这里是
storage.360buyimg.com,即京东的静态资源服务器。
:scheme(协议)
- 常见值:http 或 https,表示协议类型。
- https 保护数据,更安全
内容协商相关
accept-encoding(压缩类型)
- 浏览器告诉服务器支持的压缩方式,如 gzip、br,用于优化传输速度。
缓存验证
if-modified-since(资源修改时间)
- 请求资源的上次修改时间,只有资源更新才返回新内容。
if-none-match(资源标识符验证)
- 配合 ETag 验证缓存,若资源未改变,返回状态码
304。
安全和优化
user-agent(浏览器身份信息)
- 描述浏览器和系统信息,如 Chrome 130、Windows
- 通过 user-agent 区分客户端类型,并在服务端返回对应的资源