CORS +到达文件结尾

时间:2018-04-07 10:01:17

标签: ruby-on-rails nginx cors

我有一个生产环境(Rails 4.2和nginx)已经运行了很长时间而没有任何修改。服务器A上有一个端点(例如app.myserver.com/header),我通过AJAX从另一台服务器B(www.myserver.com)调用。

突然(从4月5日开始),服务器A随机启动(因此不是每次请求都会)抛出end of file reached错误。服务器A或B上没有最近的更改。

同时(因此每次发生错误时)浏览器(在服务器B上打开对服务器A进行AJAX调用的页面时)会抛出标准的CORS错误:

Failed to load https://app.myserver.com/header: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.myserver.com' is therefore not allowed access. The response had HTTP status code 500.

问题:知道在哪里寻找问题?

最让我感到困惑的是,它并没有始终如一地发生。

我希望错误发生在服务器A上,因为如果它是纯粹的CORS错误,我会在浏览器中看到它,对吧?

顺便说一下。这是我在该端点的Rails应用程序中的CORS设置: headers['Access-Control-Allow-Origin'] = 'https://www.myserver.com' headers['Access-Control-Allow-Methods'] = 'GET' headers['Access-Control-Allow-Credentials'] = 'true'

在请求成功的情况下,我确实在浏览器中看到了正确的标题。

我在想是否可能与浏览器更新有关,这在某种程度上改变了CORS的工作方式,但我在Chrome和Firefox中都重复了这个错误,我会惊讶于他们都在全球推动(我的用户也在错误)在同一天导致相同错误的更新。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,它确实在服务器A上,并且是由another gem抛出的end of file reached引起的,这是由于它使用了停止工作的API。或者更确切地说,正在被逐步淘汰,这就是为什么它有时候有时不工作的原因。

解释为什么CORS发生在客户端:这是因为当应用程序抛出错误时,它触发了重定向到没有正确标题的错误页面。