Rest内容协商和缓存

Rest内容协商和缓存,rest,caching,content-type,content-negotiation,Rest,Caching,Content Type,Content Negotiation,我想知道缓存如何与基于内容协商的API一起工作。由于要获取XML或JSON格式的资源,URI将是相同的,例如: http://example.com/bikes/mountain 该服务基于Accept-type头返回JSON/XML。缓存有多聪明 例如: 如果一个客户机请求使用Accept类型返回XML 响应由web服务器缓存1分钟。 第二个客户端使用Accept类型请求相同的资源以返回JSON 缓存检查是否接受/内容类型?或者这会导致JSON请求者返回XML数据,因为这是服务器缓存的数

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

http://example.com/bikes/mountain
该服务基于Accept-type头返回JSON/XML。缓存有多聪明

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

缓存检查是否接受/内容类型?或者这会导致JSON请求者返回XML数据,因为这是服务器缓存的数据吗?我希望这是很明显的事情,它已经被处理好了,否则,在URI中包含.xml/.json不是一个很大的参数吗


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

是的。请参阅中的Varie标头说明


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

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

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

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

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