13

当我向某个服务器发送请求时,会出现 303 响应,然后是请求的响应以及 200 状态码。有趣的是,我只在我的开发者控制台的网络视图上看到这个。在检查我的 $.ajax() 请求的状态码和响应时,会有第二个请求的响应,以及 200 个 http 状态码。

问题是似乎第二个请求正在被缓存(虽然是 200 状态码),我真的需要它是不可缓存的。因此,我真的很想干预使用 http 303 状态代码发生的转发过程。我希望我的 jquery 函数检查状态代码,然后发送带有显式标头的 get 请求,告诉服务器不要缓存响应。

好吧,我只是不知道该怎么做,因为(如上所述)jQuery.ajax 方法将响应转发请求的响应和状态代码(200)。

你能帮助我吗?

编辑

10.3.4 303 见其他

可以在不同的 URI 下找到对请求的响应,并且应该使用该资源上的 GET 方法来检索。此方法的存在主要是为了允许 POST 激活脚本的输出将用户代理重定向到选定的资源。新的 URI 不是原始请求资源的替代引用。303 响应不能被缓存,但对第二个(重定向)请求的响应可能是可缓存的。

也许我需要以某种方式阻止用户代理重定向自己,所以我可以进行重定向?

或者有没有办法简单地告诉服务器/浏览器不要缓存来自客户端的第二个请求?或防止它重定向我的请求?或者至少在重定向之前修改第二个请求?

4

4 回答 4

9

300 范围内的响应是透明的。AFAIK,网络浏览器不会将它们中的任何一个暴露给 javascript。因此,处理 303 不是一种选择。

您是否尝试cache在 ajaxSetup 中将属性设置为 false?它将为请求附加时间戳,防止浏览器缓存响应。您也可以自己手动执行此操作。浏览器应将第一个请求 url 与第二个响应匹配

于 2013-05-21T00:26:03.707 回答
2

无法阻止浏览器遵循 303 重定向。无论如何,这听起来不是你想要的。无论您在浏览器中做什么来防止原始请求被缓存,都应该同样适用于防止重定向的 200 被缓存。也就是说,除了为每个请求使用唯一的 URL 之外,您在浏览器端几乎无能为力。当您设置cache: false.

$.ajax({
  url: "example.html",
  cache: false
  }
}).done(function( html ) {
  $("#results").append(html);
});
于 2013-06-01T18:05:58.077 回答
1

这是旧帖子,但也许有人会发现这很有用。

我有同样的问题,在我的情况下,问题出在使用 ajax 调用的方法中。问题出在方法中设置的重定向中。因此,基于此,您不能同时使用 ajax 和重定向(服务器端),并且我redirect()从方法中删除了函数,我一切都按预期工作。顺便说一句,我正在使用codeigniter.

于 2015-11-20T19:37:58.397 回答
-1

查看statusCode.ajax()通话的属性

例子 :

$.ajax({
  statusCode: {
    303: function() {
      alert("page not found");
    }
  }
});
于 2013-05-02T12:13:12.043 回答