如何为资源生成 'last-modified' http header?

How to generate 'last-modified' http header for a resource?

我目前阅读 this 关于“last-modified”HTTP header 的内容。尽管我已经阅读了很多资源,但我仍然对它是如何为特定资源生成的感到困惑。

是否仅取决于数据库中资源发生更改时的时间戳。即,为数据库处理 PUT 请求。在同一资源上?

或者是否有任何通用或接近通用的逻辑来解决这个问题?

last-modified 时间的产生,是否完全由实际应用程序负责?或者还有其他方法吗?

正如我在 my answer about ETags 中提到的,提供 header 的责任始终由资源提供者承担。

ETags 一样,Web 服务器或框架可能有一些方法可以自动创建 header。到目前为止,最常见的情况是提供静态文件的 Web 服务器可以使用文件的修改时间来设置 Last-Modified header.

使用动态应用程序实现自动化比较困难,因为通常没有该信息的标准来源。举个我熟悉的例子,Django 允许你调用 specify a function 来获取 Last-Modified 日期。将 application-specific 逻辑放入该函数由您决定,但框架将填充 header 并与 return Not Modified 响应进行比较。

我的印象是大多数动态应用程序不会理会 Last-Modified header。如果您必须提供自定义逻辑来计算缓存 header,您最好只提供 ETag,这通常是首选。此外,使用 ETags 如果框架将为您散列响应,您通常可以完全避免执行任何 application-specific 逻辑。