2010-06-10 57 views
7

我想知道如何缓存与基于内容协商的API协同工作。由于获得XML或JSON的资源时,URI将是相同的,例如:其余内容协商和缓存

http://example.com/bikes/mountain 

的服务回报基础上,接受类型头JSON/XML。高速缓存有多聪明?

例如:

  • 如果一个客户要求使用这种类型的接受返回XML。
  • 响应被web服务器缓存了1分钟。 秒客户端请求使用接受类型相同的资源返回JSON

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

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

回答

2

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

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

这两个请求发送不同的值,所以它们应该总是分开缓存。

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

2

是的。请看RFC 2616

的描述在我对各种头文件的简单理解中,高速缓存将使用在头文件中命名的头文件字段来唯一标识高速缓存表示。