gpt4 book ai didi

ajax - 使用浏览器后退按钮时忽略内容协商

转载 作者:行者123 更新时间:2023-12-04 14:52:59 29 4
gpt4 key购买 nike

情况如下:

我有一个响应资源列表请求的 Web 应用程序,可以说:

/items

这最初是由 Web 浏览器通过导航到该路径直接请求的。浏览器使用它的标准“接受” header ,其中包括“text/html”,我的应用程序注意到这一点并返回项目列表的 HTML 内容。

在返回的 HTML 中是一些 JavaScript (jQuery),然后它会执行一个 ajax 请求来检索实际数据:
/items

只是这一次,“Accept” header 明确设置为“application/json”。再次,我的应用程序注意到这一点,JSON 正确返回到请求,数据插入到页面中,一切都很愉快。

问题来了 :用户导航到另一个页面,然后按下 BACK 按钮。然后提示他们保存文件。这原来是项目列表的 JSON 数据。

到目前为止,我已经确认这会在 Google Chrome 和 Firefox 3.5 中发生。

这里有两种可能的答案:
  • 我该如何解决这个问题。是
    有一些神奇的组合
    缓存控制 header ,或其他
    巫毒,导致浏览器做
    这里正确吗?
  • 如果你认为我在做某事
    这里大错特错,我该怎么去
    对这个?我在寻求正确性,
    但也尽量不牺牲
    灵活性。

  • 如果有帮助,该应用程序是使用 ReSTLet 2.0m4 的 JAX-RS Web 应用程序。如果有帮助,我可以提供示例请求/响应 header ,但我相信该问题是完全可重现的。

    最佳答案

    Is there some magic combination of Cache-Control headers, or other voodoo which cause the browser to do the right thing here?



    如果您对不同的 Accept: header 提供不同的响应,则必须包含 header :
    Vary: Accept

    在你的回应中。 Vary header 还应包含影响响应的任何其他请求 header ,因此例如,如果您执行 gzip/deflate 压缩,则必须包含 Accept-Encoding。

    不幸的是,IE 处理了 Vary 的许多值糟糕的是,完全破坏缓存,这对您来说可能无关紧要。

    If you think I am doing something horribly wrong here, how should I go about this?



    我不认为在同一个 URL 上为不同类型提供不同内容的想法是非常错误的,但是你让自己陷入了比你真正需要的更多的兼容性问题。在实践中,依靠通过 JSON 工作的 header 并不是一个好主意;您最好使用不同的 URL,例如 /items/json/items?format=json .

    关于ajax - 使用浏览器后退按钮时忽略内容协商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1465974/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com