休息内容协商和缓存

Ros*_*ied 7 rest caching content-type content-negotiation

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

http://example.com/bikes/mountain
Run Code Online (Sandbox Code Playgroud)

该服务基于Accept类型标头返回JSON/XML.缓存有多聪明?

例如:

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

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

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

ran*_*its 4

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

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

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

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