客户端 - 网络服务器检查最新修改日期的机制如何工作?

客户端 - 网络服务器检查最新修改日期的机制如何工作?

我知道网络浏览器会检查资源在给定的时间戳内是否被修改/过期,以决定是否下载此类资源。

因此,这里有两个问题:

i)一般来说,这个机制在后台是如何工作的,浏览器和服务器发出哪些请求/响应

ii) 我构建了一个简单的 REST php Web 服务,该服务通过 GET 请求提供 json 文件。实际上,GET 是唯一实现的协议。在响应中,我正确地包含了所有必要的头文件。我需要在服务器端实现什么才能使我的 Web 服务符合这种“检查上次更新,因此提供或不提供资源”机制?特别是我的客户端是一个 iOS 应用程序,默认情况下严格遵循 http 缓存规则。

答案1

HTTP 支持几种形式的缓存控制1

服务器端

服务器可以指定标头缓存控制电子标签过期上一次更改

  • 缓存控制包含一般指令,即资源是否可以被缓存、如何缓存以及缓存到何时。

  • 电子标签是一个任意但固定的字符串,如果资源发生变化,服务器也会更改该字符串。

  • 过期指示客户端何时不需要检查资源的新版本。

    这通常与缓存破坏器结合使用。如果您将其寻址script.jsscript.js?versionX(JavaScript 文件将忽略查询),则可以设置任意到期日期。如果脚本发生变化,您只需将其寻址为即可script.js?versionY

  • 上一次更改表示资源的最后修改日期。

客户端

一旦客户端使用上述任何一种方法缓存了某个资源,它就可以按以下步骤进行:

  • 如果资源尚未过期(缓存控制过期与此相关),则不要请求。

  • 发送带有如果修改自和/或如果没有匹配,表示电子标签和/或上一次更改资源缓存时收到的标头。

    根据这些标头,服务器可能会发送 HTTP 状态代码 304,表示资源尚未修改。在这种情况下,客户端必须从缓存中读取资源。

1这些是我个人知道的方法。可能还有更多。

相关内容