【问题标题】:spring MVC 3 get request returning code 304 incorrectly from iespring MVC 3从ie错误地获取请求返回代码304
【发布时间】:2012-01-25 20:40:13
【问题描述】:

我有一个 Spring MVC 3 网站,其获取映射到 url site.com/../someItems

问题是从 ie 9 执行时,get 请求总是返回 Http 代码 304,它不应该是因为内容实际上已被修改。即使发送了 post 请求,spring 在下一次 get 时仍然返回 304 的代码。

问题是这在 chrome 和 firefox 中可以正常工作,但在 ie 9 中,get 请求永远不会在 post 请求之后更新项目。

有人知道这里可能出了什么问题吗?为什么它没有返回代码 200 而不是 304?

我正在使用最新的 jquery 版本来执行 get/post 请求。 IE 可以正常执行发布请求,因为我可以在 chrome 上看到更新(或者如果我关闭 ie 并再次打开它)

$.get("someItems", function(data){
    $('#someDiv').html(data);
});

查看实际生成的get请求,firefox和chrome的请求包含cookie,而ie的请求没有

【问题讨论】:

    标签: jquery ajax spring http spring-mvc


    【解决方案1】:

    我找不到使用速记符号禁用缓存的方法,所以我最终得到了这个

    $.ajax({
              url: "someItems",
              data: '',
              cache: false,
              success: function(data, textStatus, jqHXR){
                  $('#someDiv').html(data);
              }
        });
    

    这似乎已经解决了问题,cookie 现在正在随请求一起发送。

    【讨论】:

      【解决方案2】:

      这是因为 IE 9 缓存了您的 Ajax 请求:

      http://www.dashbay.com/2011/05/internet-explorer-caches-ajax/

      你应该使用“CacheBuster”技术:

      $.get("someItems? "+ Math.random(), function(data){
          $('#someDiv').html(data);
      });
      

      每次都会创建不同的请求。

      【讨论】:

      • 缓存部分是正确的,但我不知道随机数部分是否是一件好事,因为它们可能会重复,所以无法保证
      • 这不是问题,它会给你带来0到1之间的随机数缓存会在随机数重复之前过期。
      • 这是一种黑客行为,也会产生负面影响,正如您链接到的同一篇文章中所强调的那样。它将缓存所有请求并为需要缓存的实际请求留出更少的空间,并且由于这是一项休息服务,因此该数字可能会干扰 URL 解析
      • 好吧,最好的办法就是不使用IE :)
      【解决方案3】:

      检查 F12 在 ie 中或使用像 http://www.ieinspector.com/httpanalyzer/ 这样的工具实际发布的内容。

      独立版的ieinspector可以抓取火狐和IE的流量,比较容易比较。他们有一个您可以使用的试用版。如果您找不到问题,请在此处发布捕获的流量。

      【讨论】:

      • IE 正在缓存请求。它没有在请求中发送“cookie”标头,而 chrome 和 firefox 发送了。出于某种原因,ie 默认启用缓存,而 ff 和 chrome 不启用。看看我的答案是否有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2012-08-10
      • 2018-04-19
      • 2012-05-05
      相关资源
      最近更新 更多