我最近在 Go 中一直在玩缓存 http 响应,我试图找出最有效的方法来生成正确的 ETag。
现在我有以下可用数据:
- 当我渲染模板时要渲染的模板的名称。
- 传递到模板或响应的动态数据以用于 json 响应。
- 整个响应体。
- 身体的长度。
- 我可能会丢失的东西?
经过一番思考,我得出的结论是,如果我将模板的名称和正在生成的动态数据结合起来,理论上这应该以最少的开销创建一个合法的唯一 ETag,但我不知道如果这样做会有多糟糕我开始想要返回 30kb 的 html 值的数据库结果。
我正在使用 Go 的 stdlib 中的 crc32 例程从我传递给它的数据中生成 ETag。
有没有更好的方法来生成 ETag,甚至缓存动态数据?我不能只监视文件的最后修改时间,因为数据可以在不更改文件的情况下更改。