Browser 如何解决我的网站和同一域的网站之间的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://

我有一个网站,加载后,应该从另一个网站获取数据,但显然,我的请求被阻止了。附件是我在浏览器的“网络”选项卡中看到的内容。请求从浏览器端发送到subdomain.example.com的代理。我需要什么CORS头?我不熟悉w/CORS,我试着在线阅读文档和示例,但没有结果。

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网站?我正在回复帖子中更新解决方案。