web-dev-qa-db-ja.com

Node.jsでPUTのCORSを許可する

私は残りのapiエンドポイントにPUT呼び出しを行おうとしており、このエラーを取得しています:

Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.

このソリューションを使用してCORSを有効にしました: enable-cors 、これはPOSTで機能します。

PUTで同じことを達成するにはどうすればよいですか?

ありがとう。

12
Akshay Khot

これを追加:

res.header( 'Access-Control-Allow-Methods'、 'PUT、POST、GET、DELETE、OPTIONS');

app.use(function(req, res, next) {
       res.header("Access-Control-Allow-Origin", "*");
       res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
       res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
          next();
    });
25
Julien

ブラウザは、ヘッダーに関係なく、すべてのクロスオリジンPUTリクエストをプリフライトするため、サーバーでOPTIONSメソッドをサポートする必要があります。また、CORSヘッダーでPUTを明示的に許可していることを確認する必要があります。これを参照してください CORSのMDNのページ

さらに、サーバーのデータに副作用を引き起こす可能性のあるHTTP要求メソッド(特に、GET以外のHTTPメソッド、またはPOST使用法)の場合、仕様ではブラウザに要求を「プリフライト」し、HTTP OPTIONS要求メソッドを使用してサーバーからサポートされているメソッドを要求し、サーバーから「承認」されると、実際の要求を実際のHTTP要求メソッドで送信します。 (CookieおよびHTTP認証データを含む)はリクエストとともに送信する必要があります。

したがって、サーバーでは、次のようにする必要があります。

app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
    // allow preflight
    if (req.method === 'OPTIONS') {
        res.send(200);
    } else {
        next();
    }
});

このトピックに関する記事は次のとおりです。

Express.JSのクロスオリジンリクエスト

9
jfriend00