情况如下:
我有一个响应资源列表请求的 Web 应用程序,可以说:
/items
这最初是由 Web 浏览器通过导航到该路径直接请求的。浏览器使用它的标准“Accept”标头,其中包括“text/html”,我的应用程序注意到这一点并返回项目列表的 HTML 内容。
返回的 HTML 中包含一些 JavaScript (jQuery),然后执行 ajax 请求来检索实际数据:
/items
只有这一次,“Accept”标头被显式设置为“application/json”。同样,我的应用程序注意到了这一点,并且 JSON 被正确地返回到请求中,数据被插入到页面中,一切都很顺利。
问题来了:用户导航到另一个页面,然后按下 BACK 按钮。然后提示他们保存文件。这原来是项目列表的JSON数据。
到目前为止,我已经确认 Google Chrome 和 Firefox 3.5 都会发生这种情况。
这里有两种可能的答案:
我该如何解决这个问题。是否有一些 Cache-Control 标头或其他巫术的神奇组合导致浏览器在这里做正确的事情?
如果您认为我在这里做错了什么,我该怎么办?我正在寻求正确性,但也尽量不牺牲灵活性。
如果有帮助,该应用程序是一个 JAX-RS Web 应用程序,使用 Restlet 2.0m4。如果有帮助,我可以提供示例请求/响应标头,但我相信这个问题是完全可重现的。