Browser 如何解决我的网站和同一域的网站之间的CORS问题?
我有一个网站,加载后,应该从另一个网站获取数据,但显然,我的请求被阻止了。附件是我在浏览器的“网络”选项卡中看到的内容。请求从浏览器端发送到subdomain.example.com的代理。我需要什么CORS头?我不熟悉w/CORS,我试着在线阅读文档和示例,但没有结果。Browser 如何解决我的网站和同一域的网站之间的CORS问题?,browser,cors,Browser,Cors,我有一个网站,加载后,应该从另一个网站获取数据,但显然,我的请求被阻止了。附件是我在浏览器的“网络”选项卡中看到的内容。请求从浏览器端发送到subdomain.example.com的代理。我需要什么CORS头?我不熟悉w/CORS,我试着在线阅读文档和示例,但没有结果。https://example.com被阻止,因为在https://subdomain.example.com:8080 无论谁拥有https://subdomain.example.com:8080,他必须添加https://
https://example.com
被阻止,因为在https://subdomain.example.com:8080
无论谁拥有https://subdomain.example.com:8080
,他必须添加https://example.com
在允许的服务器源中
https://example.com
和https://subdomain.example.com:8080
在涉及COR时,两者的处理方式不同
例如,在nodejs express代码中,这就是如何添加CORS和允许原始服务器的方式
这里是我的示例http://localhost:8080
将被https://example.com
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:8080");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
完整代码-
const bodyParser = require('body-parser')
const path = require('path');
const express = require('express');
const app = express();
const modelRoute = require('./model');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json())
app.use(express.static('dist'));
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:8080");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.get('/api/getData', modelRoute.getData);
app.post('/api/postData', modelRoute.postData);
app.listen(process.env.PORT || 8080, () => console.log(`Listening on port ${process.env.PORT || 8080}!`));
可以启用两个级别的CORS,一个在Nginx端,另一个在https://subdomain.example.com
首先,您需要在nginx.conf的全局级别或本地服务器部分添加以下标题。
nginx.conf可能已经有了这个头,那么您也需要添加这个头
add_header Access-Control-Allow-Origin https://example.com;
更重要的是,首先,您需要了解nginx.conf是如何配置的。基于此,如果在nginx.conf中启用了CORS,那么您也可以在/location节中添加此标头
这是一个样本
# local node.js server
upstream websocket {
server 127.0.0.1:3000;
}
server {
server_name ...;
# ...;
# add the header here
add_header Access-Control-Allow-Origin https://example.com;
location /path/ {
proxy_hide_header 'Access-Control-Allow-Origin';
}
}
由于nginx端的其他报头,请求可能会被阻塞。如果上述方法不起作用。您需要查看nginx.conf有哪些额外的头文件。对于exm-
add_header 'Access-Control-Allow-Origin' 'http://api.localhost';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';
这将很容易配置,但可能需要一些时间进行实验
您也可以查看下面的线程。它可能会帮助你了解更多
如果nginx.conf看起来不错,但仍然不起作用,那么只有跳转到子域网站配置。这将节省您的时间。好的,因此example.com通过nginx代理访问subdomain.example.com:8080上的数据。我该怎么办?好的,现在可能有两个级别的CORS被启用,一个在nginx上,另一个在subdomain.example.com:8080上。你需要一个接一个地检查,看看它是否有效。首先,您需要尝试nginx,如果这不起作用,那么必须在subdomain.example.com:8080允许使用origin。您是否完全控制nginx和subdomain.example.com:8080网站?我正在回复帖子中更新解决方案。