gpt4 book ai didi

javascript - 无法在服务器端 NodeJS 上启用 CORS

转载 作者:行者123 更新时间:2023-12-04 15:22:04 25 4
gpt4 key购买 nike

我无法在服务器端启用 CORS。我的前端和后端服务器有不同的端口。以下是服务器端的实现方式:

http
.createServer(function (req, res) {
// .. Here you can create your data response in a JSON format
// const { headers, method, url } = req;
// let body = [];
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Request-Method', '*');
res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET');
res.setHeader('Access-Control-Allow-Headers', '*');
if (req.method === 'OPTIONS') {
res.writeHead(200);
res.end();
return;
}

// const responseBody = { headers, method, url, body: JSON.stringify(data) };

response.write('{asd: 123}'); // Write out the default response
res.end(); //end the response
})
.listen(port);

然后我从前端调用 fetch 函数,如下所示:

fetch('http://localhost:3035', {
method: 'POST',
mode: 'same-origin', // no-cors, *cors, same-origin
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'include', // include, *same-origin, omit
headers: {
'Content-Type': 'application/json',
// 'Content-Type': 'application/x-www-form-urlencoded',
},
body: JSON.stringify(line), // body data type must match "Content-Type" header
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.log(error));

但还是报错:

安全错误:http://localhost:3030/的内容可能无法从 http://localhost:3035/加载数据。

TypeError:“尝试获取资源时出现网络错误。”

最佳答案

您通过设置 mode: 'same-origin' 而不是默认的 mode: 'cors' 明确禁止客户端的 CORS .

引用docs :

same-origin — If a request is made to another origin with this mode set, the result is simply an error. You could use this to ensure that a request is always being made to your origin.

由于 http://localhost:3035/ http://localhost:3030/ 的另一个来源,结果是,完全按照设计,“只是一个错误”。

将其设置为 mode: 'cors' 或完全删除 mode,因为无论如何 cors 都是默认设置。


附带说明,Access-Control-Request-Method 是预检请求中的请求 header ,而不是响应 header 。你应该删除它。


如评论中所述:要使经过认证的请求生效,您不能使用允许的 * 来源。如果此时您不想对预期来源进行硬编码,则可以通过始终返回当前请求来自的来源来避免此问题,使用 res.setHeader('Access-Control-Allow-Origin' , req.headers.origin).

关于javascript - 无法在服务器端 NodeJS 上启用 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63088444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com