Chrome 在导航到新页面并使用 Rails 上的 Ruby 作为后端点击后退按钮后显示缓存 JSON
Chrome showing cached JSON after navigating to new page and hitting back button using Ruby on Rails as backend
问题:
在离开使用 pushState 和 popState 处理后退和前进导航的页面后,从相同的基础 URL 检索 HTML 和 JSON,返回到使用后退的页面按钮显示缓存的 JSON 而不是 HTML.
描述:
- 在我们的应用程序中使用 Ajax 调用通过搜索结果分页,使用与页面 URL 相同的 URL,但格式 =json.
- 在每个页面上调用
window.history.pushState(state,null,url)
。
- 当在此页面中使用后退和前进按钮时,在内部使用 popState。
- 结果包含加载其他页面的链接。 (此应用程序不是 SPA)
- 点击其中一个链接,然后点击 'Back' 按钮后,Chrome 显示 JSON 存储在状态中,而不是前一个控制台错误的页面:
Resource interpreted as Document but transferred with MIME type application/json
Firefox 和 Safari 正确地重新加载了页面,并且由于我正在更新 pushState 调用中的 URL,它们正确地将页面重新加载到我希望的状态(即 url 具有正确的页面标识因此,重新加载搜索结果的正确页面)。
看起来答案是关闭 JSON 的缓存或说服 Chrome 缓存的 JSON 不是我们想要的。根据另一个问题的答案,我在返回 JSON.
时在 rails 控制器中添加了 response.headers['Vary'] = 'Accept'
因此,在上下文中:
respond_to do |format|
format.html do
render :template => xxx
end
format.json do
response.headers['Vary'] = 'Accept'
render :json => {...}
end
end
对我有帮助的问题:
- JSON breaking back button in Chrome, Reload Button in IE (Showing as naked data)
- 另一个我似乎无法重新定位的建议 'Vary' header
问题:
在离开使用 pushState 和 popState 处理后退和前进导航的页面后,从相同的基础 URL 检索 HTML 和 JSON,返回到使用后退的页面按钮显示缓存的 JSON 而不是 HTML.
描述:
- 在我们的应用程序中使用 Ajax 调用通过搜索结果分页,使用与页面 URL 相同的 URL,但格式 =json.
- 在每个页面上调用
window.history.pushState(state,null,url)
。 - 当在此页面中使用后退和前进按钮时,在内部使用 popState。
- 结果包含加载其他页面的链接。 (此应用程序不是 SPA)
- 点击其中一个链接,然后点击 'Back' 按钮后,Chrome 显示 JSON 存储在状态中,而不是前一个控制台错误的页面:
Resource interpreted as Document but transferred with MIME type application/json
Firefox 和 Safari 正确地重新加载了页面,并且由于我正在更新 pushState 调用中的 URL,它们正确地将页面重新加载到我希望的状态(即 url 具有正确的页面标识因此,重新加载搜索结果的正确页面)。
看起来答案是关闭 JSON 的缓存或说服 Chrome 缓存的 JSON 不是我们想要的。根据另一个问题的答案,我在返回 JSON.
时在 rails 控制器中添加了response.headers['Vary'] = 'Accept'
因此,在上下文中:
respond_to do |format|
format.html do
render :template => xxx
end
format.json do
response.headers['Vary'] = 'Accept'
render :json => {...}
end
end
对我有帮助的问题:
- JSON breaking back button in Chrome, Reload Button in IE (Showing as naked data)
- 另一个我似乎无法重新定位的建议 'Vary' header