私は残りのapiエンドポイントにPUT
呼び出しを行おうとしており、このエラーを取得しています:
Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
このソリューションを使用してCORS
を有効にしました: enable-cors 、これはPOST
で機能します。
PUT
で同じことを達成するにはどうすればよいですか?
ありがとう。
これを追加:
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();
});
ブラウザは、ヘッダーに関係なく、すべてのクロスオリジン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();
}
});
このトピックに関する記事は次のとおりです。