我想知道缓存如何与基于内容协商的API协同工作。由于要获取XML或JSON资源,因此URI将是相同的,例如:
http://example.com/bikes/mountain
该服务根据Accept类型标头返回JSON / XML。缓存有多聪明?
例如:
缓存是否检查接受/内容类型?或者这会导致JSON请求者获取XML数据,因为服务器缓存了什么?我希望这是一个非常明显的东西已经被照顾,否则,在URI中包含.xml / .json是不是一个非常大的论据?
我想我的问题基本上是,我可以在使用标准缓存技术时安全地使用内容协商吗?
答案 0 :(得分:2)
是。查看RFC 2616
中Vary标头的说明在我对vary头的简单理解中,缓存将使用vary头中命名的头字段来唯一标识缓存的表示。
答案 1 :(得分:2)
Darrel是正确的,因为Vary头告诉客户端它可以改变哪些请求头以获得资源的不同表示。
该值告诉客户端它可以通过设置或更改Accept标头(在您的情况下为JSON或XML)来请求不同文件格式的表示。如果使用Accept-Language标题,您还可以用英语和法语获得山地自行车的不同表示。
这两个请求发送不同的值,因此它们应始终单独缓存。
在Vary标头中使用'*'值时,表示不应缓存响应。