我浏览器一个强制刷新就是一个 Cache-Control: no-cache (请给我最新资源)。 但作为一个 CDN 代理服务器,你老是回源不太好吧。
一般中间代理服务器对于这种情况,底层到底怎么做的,有人知道吗?
1
lslqtz 2022-05-08 00:12:05 +08:00
特定间隔忽略 no-cache 吧,全程忽略客户端的应该也有。
|
2
ZE3kr 2022-05-08 00:13:04 +08:00
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control
当然是用 s-maxage=<seconds>啦: > 覆盖 max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),私有缓存会忽略它。 |
3
toneytonight 2022-05-08 08:32:35 +08:00
静态资源的话,CDN 一般默认会忽略这种请求头的,除非在 CDN 规则中特殊配置。
|
4
ojh 2022-05-08 10:09:08 +08:00
The no-cache request directive asks caches to validate the response with the origin server before reuse.
Cache-Control: no-cache 请求头就是告诉 CDN 去回源校验新鲜度,你说老是回源不太好是什么意思?这种方式既可以获取最新资源又省流量 然后底层就是遵循 HTTP 的缓存机制,你提到的这种回源就是利用 Cache-Control: no-cache 响应头 + 协商缓存通用头来实现校验新鲜度的 https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching |
5
fstar OP @ojh
就是有一个源服务器,然后有一级代理服务器、二级代理服务器。这些代理服务器会不时去源服务器获取资源缓存下来。 用户访问资源时,DNS 查询通过负载均衡,给用户返回一个对于用户来说最快的 IP ,假设是一个二级代理服务器。这时候用户的请求头带上了 Cache-Control: no-cache ,希望获取最新资源。 因为对方是代理服务器,保存的是资源的副本,并不是最新资源。 所以我就好奇这个代理服务器会不会强制请求源服务器拿到最新资源。这个缓存服务器从源服务器更新资源的过程就是回源。 |
6
ragnaroks 2022-05-08 11:53:46 +08:00
边缘节点一般会无视此类控制头,因为有效的话就失去 CDN 的意义了
|