首页 > 解决方案 > 即使没有条件请求,设置缓存控制是否会自动启用缓存?

问题描述

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

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

标头中是否有任何内容允许它发出这样的条件请求?因为我看不到cache-control,,,max-ageExpires我看到的唯一的东西是Last-Modified&Etag但它需要再次验证服务器或没有指定任何东西使它无限期地缓存?!我已经阅读了这个答案,但没有讨论这种情况。

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

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

这会影响缓存吗?我已经看过这里,不相信它应该。从我max-age对 HSTS 密钥的了解来看,它只是为了强制在一段时间内从 HTTPS 访问它。达到 max-age 后,也可以通过 HTTP 访问。

这些是我要返回的所有标题:

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

这个问题是因为这个评论而被问到的

标签: ioscachinghttpsnsurlsessioncache-control

解决方案


URLSession 不需要执行条件请求以确保其仍然有效吗?

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

电子标签:00e21950bf432476c91b811bb685b6af

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

但它是免费的

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

最后修改时间:格林威治标准时间 2013 年 10 月 4 日星期五 23:30:08

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

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

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


推荐阅读