web-dev-qa-db-ja.com

electronアプリでCORSを処理する方法

Electronアプリを作成していますが、APIプロバイダーがCORSを有効にしていない場合はAPIを呼び出す必要があります。通常提案されるソリューションは、次のようなノードとcors-anywhereを使用してローカルで実行する場合に簡単なリバースプロキシを使用することです。



let port = (process.argv.length > 2) ? parseInt (process.argv[2]) : 8080; 
require ('cors-anywhere').createServer ().listen (port, 'localhost');

その後、localhost:8080のリバースプロキシを介してすべてのリクエストをプロキシするようにアプリを構成できます。

だから、私の質問は:

  1. Electronアプリのどこでもノードとcorsを使用してリバースプロキシを作成することは可能ですか?アプリにリモートサーバーへの呼び出しを強制したくありません。

  2. Electronアプリでこれを行うより良いまたは標準的な方法はありますか?私はCORSの問題に最初に出くわしたのではないと思っています。 :)

7
Shagymoe

このようにリクエストを送信する前にヘッダーをオーバーライドするだけです

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 })
});

これらのコードをレンダラープロセスに配置する

4
Tuan Nguyen

今日この問題が発生しました React Electronにバンドルされているアプリは400を返しています

Electronの呼び出しは、API URLの通常の呼び出しとして機能することから、CORSの影響を受けないことがわかります。

これで、コールをCORSプロキシでラップし、プロキシを定期的に呼び出すと、CORSコールではないため、400エラーでエラーになるはずです。このスレッドは、cors-anywhereがそのように応答する理由を説明します=> https://github.com/Rob--W/cors-anywhere/issues/39

Electronをビルドする前に、アプリから実際にCORSプロキシを削除しました。ブラウザでテストしているので、開発にはまだCORSプロキシが必要です。

お役に立てれば。

1
user6456392