猿问

鉴于以下可能性,最有效的ETag生成是什么?

我最近在Go中缓存HTTP响应一直在鬼混,我试图找出生成正确的ETag的最有效方法。

现在,我有以下可用数据:

  1. 我曾经渲染模板时要渲染的模板的名称。

  2. 动态数据将传递到json响应的模板或响应中。

  3. 整个响应主体。

  4. 身体的长度。

  5. 我可能缺少的东西?

经过一番思考,我得出的结论是,如果我将模板的名称和所生成的动态数据结合在一起,则理论上应该以最少的开销创建一个合法的唯一ETag,但是我不知道如果我开始想返回价值30kb的html数据库结果。

我正在使用Go的stdlib中的crc32例程从传递给它的数据生成ETag。

有没有更好的方法来生成ETag,甚至缓存动态数据?我不能只监视文件的最后修改时间,因为数据可以更改而无需更改文件。


呼唤远方
浏览 216回答 2
2回答

慕丝7291255

通常,您希望使用便宜的东西作为ETag进行计算。这样做的原因是,如果客户端发送了条件请求(例如,通过If-None-MatchHTTP请求标头),则可以确定发送304 Not Modified响应是否合适,而不必对页面进行所有处理。例如,如果您具有页面内容的某种修订标识符,那么这可能会成为一个不错的ETag。如果您需要完成渲染页面以生成ETag所需的所有工作,那么您也可以只使用渲染页面内容的哈希值,或者根本不使用ETag。
随时随地看视频慕课网APP

相关分类

Go
我要回答