浏览器不区分通过AJAX获得的部分HTML和整页

Sim*_*tsa 6 ajax xmlhttprequest browser-cache http-headers

我有一个可以在URL /产品上访问的页面.当我在浏览器中访问它时,它会在布局中以整页进行响应.以下是请求标头和响应正文的简化示例:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

<layout>
<products />
</layout>
Run Code Online (Sandbox Code Playgroud)

当用户进行一些搜索时,javascript通过AJAX更新结果.结果是在没有布局的情况下呈现的,因为渲染需要时间,而我无论如何都不需要它:

Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript
X-Requested-With: XMLHttpRequest

<products />
Run Code Online (Sandbox Code Playgroud)

所以,这个工作正常,直到我添加了缓存Cache-Control: private, max-age=3600.最初我虽然我会添加Vary: X-Requested-With标题,浏览器会区分这两个响应.但是,当我通过AJAX获取/ products然后访问浏览器中的/ products时,它会显示部分AJAX响应.

有没有一种简单的方法可以解决这个问题?

PS我正在使用Ruby on Rails和jQuery,如果这很重要的话.

Sar*_*ATM 1

让您的 Ajax 调用使用不同的 URL,例如 /products/partial。