ios - 即使没有条件请求,设置缓存控制是否会自动启用缓存?
问题描述
对于以下图片:https ://upload.wikimedia.org/wikipedia/commons/7/79/2010-brown-bear.jpg
没有任何cache-control
标题。并且基于这里,即使您不发送任何内容,它也会使用其默认值,即private
. 那是不是 URLSession 需要执行条件请求以确保其仍然有效?
标头中是否有任何内容允许它发出这样的条件请求?因为我看不到cache-control
,,,max-age
。Expires
我看到的唯一的东西是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
这个问题是因为这个评论而被问到的
解决方案
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)来强制浏览器绕过缓存。
推荐阅读
- sql - 如何为我的案例实现存储过程?
- directx - 使用 DirectX11 在多个窗口中渲染的最佳方式
- asp.net-mvc-5 - 当我想要 dd/MM/yyyy 时,MVC 5 日期格式在编辑中显示为 MM/dd/yyyy
- mysql - 我可以在 MySQL 的 TIMESTAMPDIFF 函数中使用 sub Select 代替 DateTime 表达式吗?
- go - paho.mqtt.golang 未通过 websockets 连接
- c# - 如何重命名子类中继承的 API 成员?
- java - netty idlestatehandler 无效延迟时间
- php - php循环数组多维
- plugins - Sublime Text 3 - 在我当前布局的底部添加一个窗格
- javascript - 计算器显示