如何为资源生成 '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 逻辑。
我目前阅读 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 逻辑。