REST允许使用etags进行缓存。
类似地,浏览器支持缓存,除非设置了以下标头-> maxage,expires,cache-control:private
etags与上述缓存方法有什么区别?
etags与普通浏览器提供的缓存有什么区别?
我想您会发现它们是完全不同的想法。
在HTTP中,缓存语义由RFC 7234: Caching定义。
[Entity tags由RFC 7232: Conditional Requests定义
实体标签是一个不透明的验证器,用于区分同一资源的多个表示形式,而不管这些多个表示形式是由于资源状态随时间而变化,内容协商导致多个表示形式同时有效还是两者兼而有之。
Validator语义用于支持前提条件。两种常见的用例:
在“有条件GET”方案中,客户端将发送验证器(通过If-None-Match标头),这些验证器标识本地已经可用的表示形式。在验证器与当前表示匹配的情况下,服务器可以将响应限制为仅发送刷新的元数据(标头),而不是重新发送资源的表示。
在“有条件的PUT”方案中,客户端将(通过If-Match标头)发送一个验证器,该验证器标识请求旨在应用于的资源版本。
客户端希望此前提条件是,如果表示数据发生任何更改,则该方法将无法应用。
考虑“乐观锁定”-我们试图通过确保自服务器最初告诉我们以来,资源没有任何其他更改来避免“丢失编辑问题”。