【问题标题】:Randomly very long cross domain ajax request with Symfony2Symfony2随机很长的跨域ajax请求
【发布时间】:2014-11-11 01:28:23
【问题描述】:

我有两个子域 client.domain.com 和 server.domain.com 客户端只是一个带有简单 jquery ajax POST 请求的 index.html。

$.ajax({
  url: 'http://server.domain.com/upload',
  type: 'POST',
  success: function(response){
    console.log(response);
  }
});

服务器运行 symfony2 并将 Access-Control-Allow-Origin 标头设置为 '*'。

客户端发送的预检 OPTIONS 请求通常(80% 的时间)非常快(100 毫秒)并且随机非常长(10 到 15 秒 timeline + headers)。

我测试了用 Postman 发送 OPTIONS 请求,绝对没有问题,总是很快,所以它似乎来自 jquery ajax 请求。 symfony2 web profiler 也说慢请求没有问题,所以它似乎不是来自服务器。

我真的不知道如何调试这个,有什么建议吗?

【问题讨论】:

  • 我不知道这是否会有所帮助。但我发现这篇文章对这个问题非常有用:html5rocks.com/en/tutorials/cors
  • 作为第一步,尝试找出请求生命周期的哪一部分是缓慢的。您可以使用浏览器的开发者工具(网络标签上的 Chrome 时间线)和/或网络嗅探器。
  • 开发者工具除了请求所用的时间之外没有说太多:(drp.io/byM
  • 你可以访问 Symfony 的分析器吗?您可以搜索有问题的请求并查看时间线。应该提供一些线索。
  • @phpisuber01 我使用 web profiler 来检查缓慢的请求,它似乎不是来自 symfony,因为 profiler 说请求很好并且很快:(

标签: javascript ajax symfony


【解决方案1】:

这似乎是一个会话锁定问题。基本上 symfony 会阻止带有会话的并行请求。 尝试将此代码添加到您的控制器操作中,最好尽快,但在您完成编辑任何可能更新会话的内容(通常与用户相关)之前不要这样做:

public function uploadAction() {
    // code potentially affecting session

    session_write_close(); // unlock session to allow multiple requests with this session

    // rest of the code
}

更多信息:

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多