繁体   English   中英

用户特定资源的 ETag

[英]ETags for user-specific resources

我们在 REST API 中将ETag标头用于条件请求。 有些资源根据当前认证的用户有不同的内容(有些用户看的多,有些用户看的少)。 ETag当前是在“完整”资源上计算的,即所有用户都获得相同的ETag ,除非整个资源发生变化。 这不是问题,除非客户端跨用户会话缓存资源的ETag ,这似乎发生在浏览器中。 然后第二个用户将看到第一个用户的资源的缓存版本,因为服务器告诉客户端/浏览器它没有更改。 如果允许第一个用户看到的内容多于第二个用户,这甚至会变成一个安全问题。

我在互联网上搜索,但没有找到任何有关ETag和用户会话的信息。 是否有任何最佳实践或建议如何处理此类情况?

这不仅仅是一种最佳实践——如果资源的表示不同,该标准要求您发送唯一的 ETag:

“强验证器”[例如 ETag] 是表示元数据,每当表示数据发生更改时,该元数据就会更改值,这些更改将在对 GET 的 200(OK)响应的有效负载主体中可观察到。强验证器是唯一的随着时间的推移,跨越与特定资源关联的所有表示的所有版本。

而且您提到的浏览器缓存问题实际上要严重得多,因为中间缓存也可以存储数据,然后不恰当地向全世界的人们提供这些数据。

所以答案很简单——为数据的每个不同表示计算一个唯一的 ETag。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM