【问题标题】:Node Express Mongoose MongoDB CORS failureNode Express Mongoose MongoDB CORS 失败
【发布时间】:2015-10-11 11:22:23
【问题描述】:

我在 Debian VPS 网络服务器上使用 Node/Express/Mongoose/MongoDB,但由于某种原因,在线 CORS 请求没有触发。让我说一切都在我的本地服务器上完美运行。

当我将它上传到我的 Debian VPS 网络服务器时,cors 请求从未通过。我知道这一点,因为调试日志永远不会触发。 MongoDB 服务器正在运行并且 node/express 服务器正在运行。我已经 npm 重新安装了 express/mongoose 甚至是 cors 插件很多次,我认为这些不是问题......

我已经在服务器上使用带有 -origin 标志的 cURL -H 进行了测试。响应在控制台中正确返回。这使我相信 CORS 请求以某种方式被阻止(可能是浏览器??),甚至从未到达快速服务器。我尝试启动没有安全标志的浏览器也无济于事......一个奇怪的事实是,当响应确实返回 w/cURL 时,即使我用标志指定了一个来源,它们有时也会列出不同的来源。令人困惑...

我尝试了很多不同的时间和方式来更改访问源。我试过允许所有这些。我尝试允许特定于请求的请求...我尝试使用 apache2 标头 mod 并使用 .htaccess 文件来允许 cors。我也尝试过 PHP 标头,但无济于事。

网址:www.kensnote.com 浏览器错误响应如下:
Chromium-browser: "Failed to load resource" Firefox: 跨域请求被阻止:同源策略不允许读取位于http://localhost:10005/threadpreview 的远程资源。 (原因:CORS 请求失败)。

Firefox Firebug 请求标头:

接受 application/json, text/javascript, /; q=0.01 Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Cache-Control max-age=0 Connection keep-alive DNT 1 Host localhost:10005 If-None-Match W/"ssUy2L+Up13MCm2LISgPtQ==" Origin
http://www.kensnote.comReferer http://www.kensnote.com/ 用户代理 Mozilla/5.0 (X11; Linux i686; rv:39.0) Gecko/20100101 火狐/39.0

【问题讨论】:

    标签: node.js curl mongoose debian cors


    【解决方案1】:

    在实现 CORS 的浏览器中,每个跨域 GET 或 POST 请求 前面有一个 OPTIONS 请求,用于检查 GET 还是 POST 没问题。

    基本上,对于 CORS,Firefox 会在实际请求之前发送预检选项检查。 在您的服务器代码中,您应该向 OPTIONS 请求发送 OK 响应。检查以下可用于路由(或中间件)的示例代码:

    res.header("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept");  
    res.header("Access-Control-Allow-Methods", "PATCH, POST, GET, PUT, DELETE, OPTIONS");
    if ('OPTIONS' === req.method) { 
      return res.send(200);
    }
    

    【讨论】:

    • 我以为我已经尝试过了,但我会努力再试一次。不幸的是,我稍后将不得不尝试它,因为我没有连接到允许我登录服务器 atm 的互联网连接。感谢您的回复,如果它有效,我会给它一百万个赞:)(我只能给它一个大声笑)
    • 很抱歉,但这并不能解决问题...我想知道这是否与 VPS Debian 服务器或他们的防火墙安全有关?这真是一件令人沮丧的事情......
    • 作为健全性检查,您是否也设置了 Access-Control-Allow-Origin ? Access-Control-Allow-Origin, "*" 显然会授予所有域的权限,这是不可取的,但可以在此期间使用以查看是否可以解决问题。
    • 是的,我知道这是不可取的,但我一直在测试 Access-Control-Allow-Origin, "*" 并且结果相同:失败。叹息
    • 它在我尝试过的所有浏览器上都失败了,所以它可能不是 ff 问题,但 ff 至少给出了更好的错误。 Chromium 只是给出一个“获取错误”。我还尝试通过 json/jsonp ajax 调用来调用事物,该调用也适用于我的本地,但仍然不能在服务器上运行
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2023-03-08
    • 2016-06-25
    相关资源
    最近更新 更多