1. ホーム
  2. angularjs

[解決済み] OPTIONSプリフライトのリクエストをスキップするには?

2023-01-03 01:31:51

質問

私は PhoneGap アプリを開発し、現在モバイル ウェブサイトに変換しています。1 つの小さな不具合を除いて、すべてが順調に動作しています。POST リクエストを介して特定のサード パーティ API を使用していますが、アプリでは正常に機能するのに、モバイル ウェブサイトのバージョンでは失敗します。

よく見てみると、AngularJS (実際にはブラウザ) が最初に OPTIONS リクエストを送信しているようです。今日、CORS について多くを学びましたが、CORS を完全に無効にする方法を見つけ出すことができないようです。私はそのAPIにアクセスできませんが(したがって、その側での変更は不可能です)、彼らは私が作業しているドメインをAccess-Control-Allow-Originヘッダーに追加しています。

これが私が話しているコードです。

        var request = {
                language: 'fr',
                barcodes: [
                    {
                        barcode: 'somebarcode',
                        description: 'Description goes here'
                    }
                ]
            };
        }
        var config = {
            headers: { 
                'Cache-Control': 'no-cache',
                'Content-Type': 'application/json'
            }
        };
        $http.post('http://somedomain.be/trackinginfo', request, config).success(function(data, status) {
            callback(undefined, data);
        }).error(function(data, status) {
            var err = new Error('Error message');
            err.status = status;
            callback(err);
        });

ブラウザ(またはAngularJS)がOPTIONSリクエストを送信するのを防ぎ、実際のPOSTリクエストにスキップするにはどうしたらよいでしょうか?私はAngularJS 1.2.0を使用しています。

事前にありがとうございます。

どのように解決するのですか?

プリフライトは、Content-Type が application/json . これを防ぐ最も簡単な方法は、Content-Type を text/plain を指定することです。あなたの場合は application/x-www-form-urlencoded & multipart/form-data Content-Types も使用できますが、もちろんリクエストのペイロードを適切にフォーマットする必要があります。

この変更を行った後もプリフライトが表示される場合、AngularはリクエストにXヘッダを追加している可能性があります。

または、それをトリガーするヘッダー(Authorization、Cache-Control...)があるかもしれませんので、参照してください。