根据资源的时间戳生成 ETag 的最佳方法是什么
What is the best way to generate a ETag based on the timestamp of the resource
所以在我的一个项目中,我必须创建一个 http 缓存来处理对服务器的多次 API 调用。我读到了这个 ETag header,它可以与条件 GET 一起使用,以最大限度地减少服务器负载并启用缓存。但是我在生成 E-Tag 时遇到了问题。我可以使用 LAST_UPDATED_TIMESTAMP 将资源作为 ETag 或使用某种哈希算法(如 MD5)对其进行哈希处理。但是最好的方法是什么? 使用原始时间戳作为 Etag 有什么缺点吗??
非常感谢任何支持性的回答。提前致谢....干杯!
如果您的时间戳具有足够的精度,以便您可以保证它会在资源更改时随时更改,那么您可以使用时间戳的编码(header 值需要为 ascii)。
但请记住,ETag 可能不会为您节省太多。这只是一次缓存重新验证 header,因此您仍然会收到来自客户端的尽可能多的请求,只是一些请求是有条件的,如果 ETag 没有更改,您可能会避免发回有效负载,但您会仍然需要做一些工作来解决这个问题(可能会少一些工作,所以值得)。
事实上,有几个版本的 IIS 使用文件时间戳来生成 Etag。我们在构建 WinGate 的缓存模块时遇到了这个问题,当一大堆具有相同时间图的文件以相同的 Etag 结束时,我们了解到 Etag 仅在请求 URI 的上下文中有效。
所以在我的一个项目中,我必须创建一个 http 缓存来处理对服务器的多次 API 调用。我读到了这个 ETag header,它可以与条件 GET 一起使用,以最大限度地减少服务器负载并启用缓存。但是我在生成 E-Tag 时遇到了问题。我可以使用 LAST_UPDATED_TIMESTAMP 将资源作为 ETag 或使用某种哈希算法(如 MD5)对其进行哈希处理。但是最好的方法是什么? 使用原始时间戳作为 Etag 有什么缺点吗??
非常感谢任何支持性的回答。提前致谢....干杯!
如果您的时间戳具有足够的精度,以便您可以保证它会在资源更改时随时更改,那么您可以使用时间戳的编码(header 值需要为 ascii)。
但请记住,ETag 可能不会为您节省太多。这只是一次缓存重新验证 header,因此您仍然会收到来自客户端的尽可能多的请求,只是一些请求是有条件的,如果 ETag 没有更改,您可能会避免发回有效负载,但您会仍然需要做一些工作来解决这个问题(可能会少一些工作,所以值得)。
事实上,有几个版本的 IIS 使用文件时间戳来生成 Etag。我们在构建 WinGate 的缓存模块时遇到了这个问题,当一大堆具有相同时间图的文件以相同的 Etag 结束时,我们了解到 Etag 仅在请求 URI 的上下文中有效。