我想启用从我的服务器访问外部数据。 我有这个错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource
我已经看到很多关于那个问题的答案,主要是禁用Chrome保护的不安全解决方案,但我希望保持这些参数的激活。但是,如果它仅用于资源,那很好。
所以我找到了this,我认为“为单一路由启用CORS”部分可以满足我的需求。
但我不知道在我的项目中,我应该编写这样的代码。它不能在index.html中,因为它每次都在一个文件夹“dist”中重新写入。因此,当我启动项目时,我在dist中编写的内容将被删除。我需要制作一个新文件吗?一条新路线?你是怎么做到的?
答案 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概述