【问题标题】:Normal to see Status 204 then Status 200?正常看到状态 204 然后状态 200?
【发布时间】:2019-10-04 00:35:19
【问题描述】:

我在 chrome 的网络选项卡中查看我的 ajax 请求,我注意到我所做的每个 ajax 请求都发生了两次。

第一个是 204,然后是 200。我的 ajax 调用只被命中一次,所以我不确定为什么会有 2 个。

编辑

所以它似乎与 Cors 有关,我刚刚将其设置为星号 (*) 以进行测试。

我想我可以做的事情是不让它执行 2 个请求,但真正让我明白的是为什么它需要这么长时间,我查看 google chrome 网络,在我的页面上,这些 204 花费了 110 毫秒到1.97 秒。

【问题讨论】:

  • 您是否尝试过在您的 ajax 请求中使用 async: false,?希望这将解决您的两次 ajax 请求问题
  • 我正在使用 axios 作为我的 ajax 库,我不确定它是否有该选项。
  • 您可以查看与异步请求相关的 axios 库:github.com/axios/axios/issues/681
  • 我会检查一下,但我不清楚 async: false 会做什么。这基本上会使所有调用都非异步吗?

标签: ajax http-status-code-200 http-status-code-204


【解决方案1】:

这是CORS - Cross-origin resource sharing“协议”的结果。

当向其他域发出请求时,浏览器会在您的请求之前发出请求,询问服务器是否可以继续处理该请求。

这个请求使用OPTIONS方法,应该没有内容,只有响应头,所以响应码是204(没有内容)。确认请求被允许后,浏览器继续处理您的请求,现在将返回 200(或任何其他)状态码。

【讨论】:

  • 所以我的前端 ajax 代码正在访问我的 api,它位于它自己的子域上,我想没有办法解决这个问题吗?看到这些请求有点烦人,而且由于某种原因似乎有点慢,有时要恢复 204 可能需要 110 毫秒到 1.97 秒之间的任何时间,然后 200 将需要大约相同的时间。
  • 有些情况你可以避免它,但几乎每次你需要它时:-(
  • 是的,想通了,你知道什么可能导致请求之间的延迟吗?看起来应该很快。
【解决方案2】:

当您尝试向其他域发送 AJAX 请求时,您违反了同源策略。

您发送请求的服务器允许跨域请求。在这个过程中,应该有一个预检调用,那就是 HTTP OPTION 调用。

因此,您对 OPTION 和结果有两个响应。

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多