4

サーバーにexpress.jsを使用し、次のヘッダーを使用します。

x-powered-by: Express
connection: keep-alive
content-length: 2
content-type: application/json; charset=utf-8
access-control-allow-methods: GET,PUT,POST,DELETE
access-control-allow-origin: *
access-control-allow-headers: x-requested-with

res.headerCORSを許可するために電話します:

res.header("Access-Control-Allow-Origin:", "*");
res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");  
res.header("Access-Control-Allow-Headers", "x-requested-with");

ここでテストできます:http://my-api.rs.af.cm/api/products

フロントエンドにはjsbinを使用し、サーバーを次のように呼び出します:http $.ajax: //jsbin.com/apizez/37/edit

ここでの結果:http://jsbin.com/apizez/37

JSコンソールを見ると、次のエラーが表示されます。

XMLHttpRequest cannot load http://my-api.rs.af.cm/api/products. Origin http://jsbin.com is not allowed by Access-Control-Allow-Origin.

CORSに関する他のすべての回答を読みましたが、easyXDMは使いたくありません。

4

2 に答える 2

5

CORSリクエストがどのように機能するかを理解するのを手伝ってくれたRyanOldsに感謝します。

ここに正しいヘッダーがあります:

res.header('Access-Control-Allow-Origin', req.headers.origin || "*");
res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'content-Type,x-requested-with');

私のすべてのリクエストには、その応答にそのヘッダーが含まれていました。

jQueryでGETリクエストに使用$.getJSONします。それ以外の場合は機能しません。

ここで例を見ることができます:http: //jsbin.com/uwevuc/2/edit

http://jsbin.com/uwevuc/2

于 2012-07-31T09:02:34.353 に答える
0

飛行前のリクエストも考慮する必要があります。プロジェクトに「cors」npmパッケージを追加し、次の構成で開始することをお勧めします。

const cors = require('cors');

app.use(cors({
    credentials: true,
    preflightContinue: true,
    methods: ['GET', 'POST', 'PUT', 'PATCH , 'DELETE', 'OPTIONS'],
    origin: true
});

これにより、リストされたメソッドを使用して、任意のアドレスのクロスオリジンリクエストが有効になります。オリジンパラメータは非常に柔軟です。たとえば、アドレスのセット、すべてのアドレス、または正規表現で区切ることができます。パッケージのドキュメントは次のとおりです。

https://expressjs.com/en/resources/middleware/cors.html

于 2021-05-15T00:10:57.270 に答える