我知道网络浏览器会检查资源在给定的时间戳内是否被修改/过期,以决定是否下载此类资源。
因此,这里有两个问题:
i)一般来说,这个机制在后台是如何工作的,浏览器和服务器发出哪些请求/响应
ii) 我构建了一个简单的 REST php Web 服务,该服务通过 GET 请求提供 json 文件。实际上,GET 是唯一实现的协议。在响应中,我正确地包含了所有必要的头文件。我需要在服务器端实现什么才能使我的 Web 服务符合这种“检查上次更新,因此提供或不提供资源”机制?特别是我的客户端是一个 iOS 应用程序,默认情况下严格遵循 http 缓存规则。
答案1
HTTP 支持几种形式的缓存控制1:
服务器端
缓存控制包含一般指令,即资源是否可以被缓存、如何缓存以及缓存到何时。
电子标签是一个任意但固定的字符串,如果资源发生变化,服务器也会更改该字符串。
过期指示客户端何时不需要检查资源的新版本。
这通常与缓存破坏器结合使用。如果您将其寻址
script.js
为script.js?versionX
(JavaScript 文件将忽略查询),则可以设置任意到期日期。如果脚本发生变化,您只需将其寻址为即可script.js?versionY
。上一次更改表示资源的最后修改日期。
客户端
一旦客户端使用上述任何一种方法缓存了某个资源,它就可以按以下步骤进行:
如果资源尚未过期(缓存控制和过期与此相关),则不要请求。
发送带有如果修改自和/或如果没有匹配,表示电子标签和/或上一次更改资源缓存时收到的标头。
根据这些标头,服务器可能会发送 HTTP 状态代码 304,表示资源尚未修改。在这种情况下,客户端必须从缓存中读取资源。
1这些是我个人知道的方法。可能还有更多。