3

私は単にいくつかのjsonを投稿したいだけですが、デフォルトではリクエストはプリフライト OPTIONS リクエストを行います。

ユーザーの接続が信頼できないことが多いため、これを避けたいと思います。追加のリクエストは信頼性をさらに低下させ、「CORS が拒否されました」などの不可解なエラー メッセージが表示されます。

var request = require('request');
function (data, cb) {
  if (!cb) cb = function () {};
  request({
    method: "POST",
    url: "someurl",
    json:true,
    body: data
  }, function (err, response, body) {
    if (err) cb(err);
    else if (response.statusCode != 200) {
      cb(new Error("log satus code: " + response.statusCode));
    } else {
      cb(null, body);
    }
  })

明確にするために、私は実際の CORS を実行しており、プリフライト OPTIONS リクエストを回避したいと考えています。サーブもコントロールできます(それは問題ではありませんが)。

4

2 に答える 2

4

戦闘前の OPTIONS リクエストは、CORS フローの必須部分です。それを回避する方法はありません。ただし、クライアントはプリフライト応答をキャッシュできるため、実際にプリフライト要求を行う必要があるのは、POST するたびではなく 1 回だけです。

プリフライト リクエストのキャッシュを有効にするには、プリフライト リクエストがAccess-Control-Max-Ageヘッダーで応答する必要があります。このヘッダーの値は、クライアントが応答をキャッシュできる秒数です。

たとえば、次の応答ヘッダーにより、クライアントはプリフライト応答を 5 分間キャッシュできます。

Access-Control-Max-Age: 300

アプリケーションに適した値を選択する必要があります。将来プリフライト応答を変更する必要がある場合に備えて、通常、この値をあまり大きくない値に設定することをお勧めします。プリフライト リクエストを 1 か月間キャッシュすることを許可すると、1 か月後にキャッシュが期限切れになるまで、ユーザーは変更を取得できない可能性があります。

于 2015-06-17T05:02:10.437 に答える