从任何 Web 应用程序调用时,Window exe API 会出现问题。 C++

问题描述 投票:0回答:2

我们使用 CPP 语言创建了一个 EXE 文件,并创建了一个像

http://localhost:5800/get-id/
这样的 API。当我在浏览器中打开时,返回完美的输出。

当我在 HTML > 脚本页面中使用

fetch
时,然后得到
No "Access-Control-Allow-Origin" header is present on the requested resource.

代码1:

fetch("http://localhost:5800/get-id/", {method: 'GET').then(function(response) {
  console.log(response.text()); 
}).catch(function(error) {  
  console.log('Request failed', error)  
});

经过研究,我添加了

mode: no-cors
错误丢失但得到空响应。 代码2:

fetch("http://localhost:5800/get-id/", {method: 'GET', mode: 'no-cors'}).then(function(response) {
  console.log(response.text()); 
}).catch(function(error) {  
  console.log('Request failed', error)  
});

如果我在任何检查控制台中使用

code2
,则会得到一个空主体,但是当我在浏览器中打开
http://localhost:5800/get-id/
并尝试在控制台中点击
code2
时,则会获得完美的参数。

这意味着,本地主机域工作正常,但是当它通过我的错误从任何域获取时。

正确的解决方案是什么?在C/CPP语言中我们如何允许cors?

奇怪:

当我从控制台点击时,它显示我是空的

对于相同的请求,我检查了网络选项卡,显示 200 OK 以及正确的响应/预览数据

javascript c++ ajax cors
2个回答
1
投票

CORS 是一个复杂的话题,我通常使用 CORS 中间件 在 Express 服务器的 Node.JS 中处理它(也许代码对解决这个问题很有用)。

它的目标是允许域

api-domain
上的API列出可以使用它的Web应用程序,例如您的应用程序位于
webapp-domain
域上。

当应用程序调用

fetch('http://api-domain/get-id/')
到另一个域时,称为跨源调用。

所有浏览器都执行 CORS 预检这样的调用来检查津贴:

OPTIONS /get-id/
Access-Control-Request-Method: GET
Access-Control-Request-Headers: origin, x-requested-with
Origin: http://webapp-domain

(请注意,这是对 API 的 OPTION 请求,而不是 GET)

并且响应应将

webapp-domain
列为允许(并指定允许哪些 HTTP 方法)

HTTP/1.1 204 No Content
Connection: keep-alive
Access-Control-Allow-Origin: http://webapp-domain
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 86400

成功完成这样的预检调用后,浏览器将继续

fetch
,例如,它将向
http://api-domain/get-id/

发送 GET 请求

附注

跳过 CORS 的方法之一是在

webapp-domain
中设置 HTTP 代理,该代理将在服务器端调用
api-domain
,并且不受 CORS 限制。有关详细信息,请参阅this答案。


0
投票

HTTP/1.1 204 无内容 连接:保持活动状态 访问控制允许来源:http://webapp-domain 访问控制允许方法:POST、GET、OPTIONS、DELETE 访问控制最大年龄:86400

© www.soinside.com 2019 - 2024. All rights reserved.