8

我想知道缓存如何与基于内容协商的 API 一起使用。由于要获取 XML 或 JSON 中的资源,因此 URI 将是相同的,例如:

http://example.com/bikes/mountain

该服务根据 Accept 类型标头返回 JSON / XML。缓存有多智能?

例如:

  • 如果一个客户端使用 Accept 类型请求返回 XML。
  • 响应由 Web 服务器缓存 1 分钟。
  • 第二个客户端使用 Accept 类型请求相同的资源以返回 JSON

缓存检查是否接受/内容类型?或者这是否会导致 JSON 请求者获取 XML 数据,因为那是服务器缓存的内容?我希望这是一件如此明显的事情,它已经得到了照顾,否则,在 URI 中包含 .xml / .json 不是一个相当大的论点吗?

我想我的问题基本上是,我可以在仍然使用标准缓存技术的同时安全地使用内容协商吗?

4

2 回答 2

3

是的。查看RFC 2616中对 Vary 标头的描述

在我对可变标头的简单理解中,缓存将使用可变标头中命名的标头字段来唯一标识缓存的表示形式。

于 2010-06-10T13:57:19.007 回答
3

Darrel 是正确的,因为 Vary 标头告诉客户端它可以改变哪些请求标头以获得资源的不同表示。

该值告诉客户端它可以通过设置或更改 Accept 标头(在您的情况下为 JSON 或 XML)来请求不同文件格式的表示。如果您使用 Accept-Language 标题,您还可以获得英语和法语的山地自行车的不同表示。

这两个请求发送不同的值,因此它们应该始终分开缓存。

当您在 Vary 标头中使用 '*' 值时,这意味着不应缓存响应。

于 2010-06-10T14:15:14.357 回答