我正在构建一个电子应用程序,需要调用API提供者没有启用CORS的API。通常提出的解决方案是使用反向代理,这在使用节点和cors在本地运行时非常简单--如下所示:
let port = (process.argv.length > 2) ? parseInt (process.argv[2]) : 8080;
require ('cors-anywhere').createServer ().listen (port, 'localhost');然后,应用程序可以配置为通过本地主机8080上的反向代理代理所有请求。
所以,我的问题是:
发布于 2019-05-30 10:49:46
只需在使用webRequest.onBeforeSendHeaders发送请求之前覆盖头
const filter = {
urls: ['*://*.google.com/*']
};
const session = electron.remote.session
session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
details.requestHeaders['Origin'] = null;
details.headers['Origin'] = null;
callback({ requestHeaders: details.requestHeaders })
});
将这些代码放入渲染程序进程中
发布于 2020-10-29 15:39:36
在我的应用程序中,仅在请求中删除Origin头(通过将其设置为null)是不够的。我传递请求的服务器总是在响应中提供Access-Control-Allow-Origin头,不管它是什么,Origin头都在请求中。因此,Chrome的嵌入式实例不喜欢ACAO头不符合它对原点的理解。
相反,我必须更改请求的Origin头,然后在响应的Access-Control-Allow-Origin头上恢复它。
app.on('ready', () => {
// Modify the origin for all requests to the following urls.
const filter = {
urls: ['http://example.com/*']
};
session.defaultSession.webRequest.onBeforeSendHeaders(
filter,
(details, callback) => {
console.log(details);
details.requestHeaders['Origin'] = 'http://example.com';
callback({ requestHeaders: details.requestHeaders });
}
);
session.defaultSession.webRequest.onHeadersReceived(
filter,
(details, callback) => {
console.log(details);
details.responseHeaders['Access-Control-Allow-Origin'] = [
'capacitor-electron://-'
];
callback({ responseHeaders: details.responseHeaders });
}
);
myCapacitorApp.init();
});发布于 2021-02-23 02:14:12
如果您在本地主机上运行web应用程序,请试一试。
const filter = {
urls: ['http://example.com/*'] // Remote API URS for which you are getting CORS error
}
browserWindow.webContents.session.webRequest.onBeforeSendHeaders(
filter,
(details, callback) => {
details.requestHeaders.Origin = `http://example.com/*`
callback({ requestHeaders: details.requestHeaders })
}
)
browserWindow.webContents.session.webRequest.onHeadersReceived(
filter,
(details, callback) => {
details.responseHeaders['access-control-allow-origin'] = [
'capacitor-electron://-',
'http://localhost:3000' // URL your local electron app hosted
]
callback({ responseHeaders: details.responseHeaders })
}
)https://stackoverflow.com/questions/51254618
复制相似问题