Heroku SSL Rails应用程序中的MSIE$.ajax延迟



我们在Heroku上有一个Rails 3应用程序,它在IE11中的jQuery AJAX请求上出现了长时间延迟,持续大约4或5秒。请求没有失败;它们只需要很长时间。文明浏览器如Chrome、FF&Safari都在几分之一秒内做出响应。我可以看到服务器上的响应时间很快,但IE需要4-5秒才能显示请求完成。

我有一个barebones应用程序要演示:https://ajax-testing.herokuapp.com/test.单击文本将AJAX请求发送到服务器,服务器会将其发回并显示在警报中。我发现它在所有浏览器中都很快,除了IE,在那里你5秒钟都看不到警报。

当我在本地测试时,我没有遇到延迟,但当它部署到Heroku时,我会遇到。我已经确定这与Heroku上的SSL有关,因为如果我将config.force_SSL设置为false,问题就会消失。Heroku上的SSL(有延迟)和非SSL(无延迟)标头之间唯一真正的区别是SSL版本中的Strict Transport Security标头。

以下是AJAX请求的代码。。。

  $.ajax({
    type: "POST",
    url: "ajax_call",
    dataType: 'json',
    data: { message: "Test message" }
  }).done(function(data) {
    alert(data["message"]);
  });

设置:

  • Heroku上的轨道3.2.21
  • jQuery 1.11.1
  • 尝试了thin&独角兽
  • IE 11.0.9600.177633(11.0.16更新)

我尝试过不同的服务器,去掉了dataType和其他$.ajax变体,添加了IE特定的元标签,等等。我在网上找不到任何关于这个特定问题的参考。有人对它可能是什么或如何进一步缩小范围有建议吗?

这是一个Heroku问题,原因是最近负载均衡器更新中的一个错误。我花了大量时间来研究它,假设它是由最近的IE更新引起的,这与第一次报告该问题的时间相吻合,而且IE是我们测试中唯一受影响的浏览器。

当我看到JavaScript执行有问题时,我的第一个想法不是:检查ELB——但它可能应该是;)这是我们的应用程序第一次因Heroku/Amazon更新而中断。

显然,这个问题发生在没有Content-LengthTransfer-encoding: chunked标头的请求上,它可能只影响某些堆栈配置,否则我想我可以找到更多关于它的报告

如果你遇到这种情况,请创建一个帮助单,告诉他们你的应用程序中有IE延迟,你认为这是由于最近的ELB更新造成的。他们可以为您的应用程序部署ELB更新,这就是他们最终为我们所做的,并且最终将为所有Heroku应用程序所做的。

在我的案例中,我在Heroku上使用了带有独角兽的Rails,所有页面都在SSL下。他们建议设置RACK_ENV=deployment来强制独角兽加载Rack::ContentLengthRack::Chunked中间件(或者自己手动添加)。这为我解决了这个问题,而无需让他们专门为我的应用程序部署更新。

感谢这个线程,我们很快就要花很多时间了。我们刚刚启用了Rack::Deflate,但回滚并没有解决这个问题。我们也在HTTPS下运行。

Heroku的回应是:

我们最近发现,这是因为独角兽网络服务器行为+Heroku默认RACK_ENV=生产。实际上,您应该使用带有RACK_ENV=部署的Unicorn(请参阅https://github.com/defunkt/unicorn/blob/master/lib/unicorn.rb#L56-L79获取更多详细信息),或者您应该将Unicorn与nginx等HTTP服务器一起使用。

他们两个都解决了你现在的问题。

出现此问题是因为您的响应不包含Content-Length标头,也不包含传输编码:chunked。它不是无效的HTTP响应,但不是好的HTTP响应并且您想要修复它。您也可以手动添加中间件,如Rack::ContentLength和/或Rack::Chunked。

或者,您可以切换到彪马(https://github.com/defunkt/unicorn/blob/master/lib/unicorn.rb#L56-L79我们现在推荐的网络服务器)。

我已经添加了Rack::Chunked现在要离开道奇。Rack::Deflate剥离了contentLength标头,我相信。

我并没有真正意识到RACK_ENV选项,但我并不是唯一一个这样做的人!

我想更新RACK_ENV并迁移到彪马是下一步。

相关内容

  • 没有找到相关文章

最新更新