前端的静态资源请求有个特点是幂等,一般在文件名上会带上文件的哈希值或版本号,如果 URL 不变一般则认为内容不变。
可以配置 Cache-Control
来设置强缓存或 304 缓存静态资源;但首次访问或静态资源更新时,还是会需要去请求 Web 应用服务器(源站)获取内容。
所以没有缓存时,首次资源请求的速度则是由用户的电脑和 Web 应用服务器的物理距离决定的。CDN 服务一般在全国/全球有非常多的服务器节点,如果用户可以请求就近的 CDN 服务器节点,由 CDN 服务器去代理请求源站获取内容并且缓存该文件,之后附近用户的请求就可以直接返回 CDN 服务器上缓存的文件,请求的速度就会加速非常多,文件越大则效果越明显。
CDN 服务之所以可以让用户请求到就近的服务器节点九九六三四零九五,利用的是 DNS 的 CNAME 记录。在 DNS 服务商上把你网站域名 j到 CDN 提供的域名,DNS 服务商提供了智能解析功能,会根据用户的 IP 地址返回就近的 CDN 服务器的 IP 地址。
CDN 服务上配置了源站(IP 地址或域名)。可以设置不同 URL 的缓存的时间、自定义一些响应 Header、访问控制、流量控制等等。
如果还想加速第一次请求时的速度,可以使用预取/预热功能,CDN 服务器节点会主动去源站先取得资源文件并缓存,用户请求时则直接返回 CDN 服务器上的缓存内容。