CORS和No'Access-Control-Allow-Origin'

时间:2018-03-02 15:18:03

标签: javascript node.js express routes cors

我想启用从我的服务器访问外部数据。 我有这个错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource

我已经看到很多关于那个问题的答案,主要是禁用Chrome保护的不安全解决方案,但我希望保持这些参数的激活。但是,如果它仅用于资源,那很好。

所以我找到了this,我认为“为单一路由启用CORS”部分可以满足我的需求。

但我不知道在我的项目中,我应该编写这样的代码。它不能在index.html中,因为它每次都在一个文件夹“dist”中重新写入。因此,当我启动项目时,我在dist中编写的内容将被删除。我需要制作一个新文件吗?一条新路线?你是怎么做到的?

3 个答案:

答案 0 :(得分:1)

Access-Control-Allow-Origin响应标头指示响应是否可以与具有给定源的资源共享。

要允许任何资源访问您的资源,您可以指定:

Access-Control-Allow-Origin: *

要允许https://developer.mozilla.org访问您的资源,您可以指定:

Access-Control-Allow-Origin: https://developer.mozilla.org

以下是您可能正在寻找的PHP代码:

 header("Access-Control-Allow-Origin: *");

您可以在此页面上找到有关Access-Control-Allow-Origin的更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

答案 1 :(得分:1)

您可以使用cors包轻松设置这些配置。简单的配置允许所有来源:

var cors = require('cors')
var app = express()

app.use(cors())

您可以只允许特定来源访问您的服务器:

var cors = require('cors')
var app = express()

var whitelist = ['http://example1.com', 'http://example2.com']
var corsOptions = {
  origin: function (origin, callback) {
    if (whitelist.indexOf(origin) !== -1) {
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  }
}

app.get('/products/:id', cors(corsOptions), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for a whitelisted domain.'})
})

答案 2 :(得分:0)

没有必要为此使用软件包,只需设置一个像这样的中间件

app.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

如前所述,要限制对特定域的访问,请将*更改为https://whateveryourdomainis.com。如果您希望允许访问多个域,请按照@guijob概述

进行操作