即使没有条件请求,设置 cache-control 不会自动启用缓存吗?

Does not setting cache-control automatically enable caching even without conditional request?

对于下图:https://upload.wikimedia.org/wikipedia/commons/7/79/2010-brown-bear.jpg

没有 cache-control header。基于 here,即使您不发送任何内容,它也会使用其默认值 private。那是不是 URLSession 需要执行 条件请求 来确保它仍然有效?

在header中是否有任何允许它提出这样的条件请求的东西?因为我没有看到 cache-controlmax-ageExpires。我唯一看到的是 Last-Modified & Etag 但它又需要针对服务器进行验证,或者没有指定任何内容使其无限期缓存?!我已经阅读了 this answer,但没有讨论这种情况。

但它正在被 URLSession 缓存。 (因为如果我关闭互联网,它仍然会被下载)

我唯一看到的是 "Strict-Transport-Security": max-age=106384710

这会影响缓存吗?我已经看了 here 并且不相信它应该。据我所知,HSTS 密钥的 max-age 仅用于强制在特定时间段内从 HTTPS 访问它。达到 max-age 后,也可以通过 HTTP 进行访问。

这些是我要返回的所有 header:

Date : Wed, 31 Oct 2018 14:15:33 GMT
Content-Length : 215104
Access-Control-Expose-Headers: Age, Date, Content-Length, Content-Range, X-Content-Duration, X-Cache, X-Varnish
Via : 1.1 varnish (Varnish/5.1), 1.1 varnish (Varnish/5.1)    
Age : 18581
Etag : 00e21950bf432476c91b811bb685b6af
Strict-Transport-Security : max-age=106384710; includeSubDomains; preload
Accept-Ranges : bytes
Content-Type : image/jpeg
Last-Modified : Fri, 04 Oct 2013 23:30:08 GMT
Access-Control-Allow-Origin : *
Timing-Allow-Origin : *
x-analytics : https=1;nocookies=1
x-object-meta-sha1base36 : 42tq5grg9rq1ydmqd4z5hmmqj6h2309
x-varnish : 60926196 48388489, 342256851 317476424
x-cache-status : hit-front
x-trans-id : tx08ed43bbcc1946269a9a3-005bd97070
x-timestamp : 1380929407.39127
x-cache : cp1076 hit/7, cp1090 hit/7
x-client-ip : 2001:558:1400:4e:171:2a98:fad6:2579

这个问题是因为 评论

doesn't the URLSession need to perform a conditional request to make sure its still valid?

用户代理 应该 执行条件请求,因为

Etag: 00e21950bf432476c91b811bb685b6af

出席。我的桌面 Chrome 确实执行了条件请求(并返回 304 Not Modified)。

但不这样做是免费的

但是用户代理可以完全自由地自行决定。完全免费看:

Last-Modified: Fri, 04 Oct 2013 23:30:08 GMT

并决定资源在接下来的五分钟内可能还不错1。如果网络连接中断,则显示缓存版本是完全合理和正确的。事实上,即使您的拨号 0.00336 Mbps 拨号调制解调器已断开连接,您的浏览器也会向您显示网站。

您不希望您的浏览器什么都不显示,当它完全了解时它可以向您显示一些东西。当我们谈论糟糕的互联网连接时,它变得更加有用,这不是因为拨号速度慢和服务器出现故障,而是因为移动计算和计量数据计划。

1我说5分钟,因为在早期的web中,服务器并没有给缓存提示。所以浏览器甚至没有被询问就缓存了东西。 5 分钟是一个很好的数字。你使用了Ctrl+F5(或者是Shift+F5,或者是Shift+Click,还是Alt+点击)强制浏览器绕过缓存。