休息内容协商和缓存

时间:2010-06-10 13:36:38

标签: rest caching content-type content-negotiation

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

http://example.com/bikes/mountain

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

例如:
   

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

缓存是否检查接受/内容类型?或者这会导致JSON请求者获取XML数据,因为服务器缓存了什么?我希望这是一个非常明显的东西已经被照顾,否则,在URI中包含.xml / .json是不是一个非常大的论据?

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

2 个答案:

答案 0 :(得分:2)

是。查看RFC 2616

中Vary标头的说明

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

答案 1 :(得分:2)

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

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

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

在Vary标头中使用'*'值时,表示不应缓存响应。