我有一个可以根据接受的内容类型提供的URL。当浏览器使用html加载该页面时,所有内容都显示正确。在该页面上,使用application / json从同一URL加载更多内容。 使用链接然后返回历史记录到原始页面后,将显示json内容。
从chrome和firefox开发工具我可以看到,他们正在从缓存加载页面而不是再次请求它。
这是我发送的所有标题:
Content-Length:72753
Content-Type:text/html; charset=UTF-8
为什么浏览器将其缓存独立于内容类型,是否有办法告诉他们这样做?
更新:它看起来像chromium中的一个没有修复的错误。
更新:@ T.J。克劳德的回答是正确的。 vary header解决了chrome和firefox中的问题。
答案 0 :(得分:2)
如果您允许缓存,那么浏览器无法知道如果他们再次要求提供内容,将更改内容类型。
在我看来,最好的办法是为HTML和JSON使用不同的URL,允许每个URL缓存到适合他们的任何程度。
如果你真的想让两种类型的URL相同,理论上Vary
response header就是为了这个。它是缓存内容的一部分,并告诉缓存(浏览器,代理等)请求的哪些部分会影响响应。 This section也很有帮助。例如,Vary: Accept
会说响应会因Accept
请求标头而异。
但是我会在依赖它之前测试,测试,测试。缓存实现通常是出了名的错误。但是我没有关于与Vary
标题相关的错误的具体信息。