从京东网站HTTP请求看缓存策略 | HTTP的场景实践

117 阅读4分钟

课程链接:HTTP 协议的应用场景分析 - 掘金

缓存策略

缓存策略是为了加快加载速度、减少服务器压力的设置。

常见场景:

  • 静态资源(CSS/JS/图片) :让文件能缓存一段时间,不用每次都下载。
  • 动态数据(API) :确保拿到最新数据,但也可以减少不必要的请求。

在Google Chrome进入www.jd.com/

右键检查,进入网络面板

点击刷新,可以看到面板列出了所有加载的资源

点击某个资源,可以查看它的详细信息

某个资源的详细信息

标头

image.png

Request Headers(请求头):显示浏览器向服务器发送的请求信息,如User-Agent

Response Headers(响应头):显示服务器返回的信息,如缓存控制Cache-Control


常规内容

image.png

1️⃣ 请求网址

文件放在京东的静态资源服务器上,由 storage.360buyimg.com 提供 /static/css/index.chunk.css 是 CSS 文件的路径

2️⃣ 请求方法:GET

浏览器从服务器获取这个文件

3️⃣ 状态代码:304 Not Modified

浏览器告诉你:

服务器确认这个文件没有改变,缓存的版本可以直接使用,不需要下载新的文件(通过 ETagLast-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

  1. 同源请求
    如果两个地址的域名、协议和端口都相同。比如从 www.jd.com 跳转到 www.jd.com/static.css ,会发送完整的引荐来源 URL。
  2. 跨域请求
    如果目标地址和来源地址的域名、协议或端口不同。比如从 www.jd.com 跳转到 storage.360buyimg.com ,只发送来源的域名部分,比如Referer: https://www.jd.com

响应标头

image.png

重要字段解释

缓存相关

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 版本。

请求标头

重要字段解释

image.png

基础字段

: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 区分客户端类型,并在服务端返回对应的资源