我们在REST API中将ETag
标头用于条件请求。根据当前经过身份验证的用户,某些资源具有不同的内容(某些用户查看更多信息,而其他用户查看较少信息)。当前,ETag
是在“全部”资源上计算的,即,除非整体资源发生变化,否则所有用户都将获得相同的ETag
。除非客户端跨用户会话缓存资源的ETag
(这似乎发生在浏览器中),否则这不是问题。由于服务器告诉客户端/浏览器它没有更改,因此第二个用户将从第一个用户看到资源的缓存版本。如果允许第一个用户看到的内容比第二个用户多,那么这甚至可能导致安全问题。
我正在搜索Internet,但未找到有关ETag
和用户会话的任何信息。是否有任何最佳做法或建议来处理此类情况?
这不仅仅是最佳实践,如果资源的表示形式不同,standard 需要您将发送唯一的ETag:
“强验证器” [例如ETag]是表示元数据,只要在对GET的200(OK)响应的有效载荷主体中可观察到的表示数据发生更改,它就会更改值。在一段时间内,与特定资源相关联的所有表示形式的所有版本都是唯一的。
您在浏览器缓存中注意到的问题实际上要严重得多,因为中间缓存也可以存储数据,然后将其不适当地提供给全世界的人们。
所以答案很简单-为数据的每种不同表示形式都计算一个唯一的ETag。