用户特定资源的ETag

我们在REST API中将etag头用于条件请求。根据当前经过身份验证的用户,某些资源具有不同的内容(某些用户查看更多信息,而其他用户查看较少信息)。当前etag是在“全部”资源上计算的,即,除非整体资源发生变化,否则所有用户都将获得相同的etag。除非客户端跨用户会话缓存资源etag,这似乎是在浏览器中发生,否则这不是问题。由于服务器告诉客户端/浏览器它没有更改,因此第二个用户将从第一个用户看到资源的缓存版本。如果第一个用户被允许看到的内容比第二个用户多,那么甚至会变成安全问题。

我正在搜索Internet,但是没有找到有关etag和用户会话的任何信息。是否有任何最佳做法或建议来处理此类情况?

ioublack 回答:用户特定资源的ETag

这不仅仅是一种最佳实践,如果资源的表示形式不同,standard 要求发送一个唯一的ETag:

  

“强验证器”(例如ETag)是表示元数据,只要在对GET的200(正常)响应的有效载荷主体中可以观察到的表示数据发生更改,它就会更改值。验证器在一段时间内在与特定资源相关联的所有表示形式的所有版本中都是唯一的。

您注意到的关于浏览器缓存的问题实际上要严重得多,因为中间缓存也可以存储数据,然后不恰当地将其提供给全世界的人们。

因此答案很简单-为数据的每种不同表示形式计算一个唯一的ETag。

本文链接:https://www.f2er.com/3160881.html

大家都在问