高度に構成可能で、ミドルウェアと互換性のある Node.js 用の CORS 実装。
Access-Control-Request-Headers
ヘッダーを送信する場合の回避策を追加します。OPTIONS
リクエストを処理する必要がある場合は、 endPreflightRequests
オプションを確認してください。(matches)
ではなく(err, matches)
になりました。 実際の例については、 example/express/
参照してください。
var express, corser, app;
express = require("express");
corser = require("corser");
app = express();
app.use(corser.create());
app.get("/", function (req, res) {
res.writeHead(200);
res.end("Nice weather today, huh?");
});
app.listen(1337);
実際の例については、 example/connect/
参照してください。
var connect, corser, app;
connect = require("connect");
corser = require("corser");
app = connect();
app.use(corser.create());
app.use(function (req, res) {
res.writeHead(200);
res.end("Nice weather today, huh?");
});
app.listen(1337);
http
で Corser を使用する方法 var http, corser, corserRequestListener;
http = require("http");
corser = require("corser");
// Create Corser request listener.
corserRequestListener = corser.create();
http.createServer(function (req, res) {
// Route req and res through the request listener.
corserRequestListener(req, res, function () {
res.writeHead(200);
res.end("Nice weather today, huh?");
});
}).listen(1337);
CORS を有効にするための適切な応答ヘッダーを生成する Corser 要求リスナーの作成は、次のように簡単です。
corser.create()
これはAccess-Control-Allow-Origin: *
の応答ヘッダーを設定するのと同じです。オリジンを制限したい場合、またはより高度なリクエスト ヘッダーまたはレスポンス ヘッダーを許可したい場合は、設定オブジェクトをcorser.create
に渡す必要があります。
Corser はプリフライト リクエストを自動的に終了します。プリフライト リクエストは、CORS リクエストにどのメソッド、リクエスト ヘッダー、およびレスポンス ヘッダーが許可されるかをサーバーとネゴシエートするためにブラウザーが特定の条件下で送信する特別なOPTIONS
リクエストです。他のものにOPTIONS
メソッドを使用する必要がある場合は、 endPreflightRequests
false
に設定し、それらのリクエストを自分で終了します。
var corserRequestListener;
corserRequestListener = corser.create({
endPreflightRequests: false
});
corserRequestListener(req, res, function () {
if (req.method === "OPTIONS") {
// End CORS preflight request.
res.writeHead(204);
res.end();
} else {
// Implement other HTTP methods.
}
});
次のプロパティを持つ構成オブジェクトをcorser.create
に渡すことができます。
origins
大文字と小文字を区別する送信元のホワイトリスト。このリストにない送信元からのリクエストは、CORS によって処理されません。すべてのオリジン ( Access-Control-Allow-Origin: *
動作) を受け入れるには、プロパティを省略するか、空の配列 ( []
) に設定します。
動的な原点チェックを可能にするために、配列の代わりに関数(origin, callback)
を渡すことができます。 origin
は Origin ヘッダー、 callback
は function (err, matches)
です。matches matches
、指定された Origin ヘッダーが一致するかどうかを示すブール値のフラグです。
デフォルト: すべてのオリジンが受け入れられます。
methods
メソッドの大文字のホワイトリスト。このリストにないメソッドがリクエストで使用されている場合、そのリクエストは CORS によって処理されません。
ここに値を設定すると、デフォルトの単純なメソッドのリストが上書きされます。それらを失わないようにするには、追加するメソッドをcorser.simpleMethods
: corser.simpleMethods.concat(["PUT", "DELETE"])
で連結します。
デフォルト: 単純なメソッド ( GET
、 HEAD
、 POST
)。
requestHeaders
大文字と小文字を区別しないリクエスト ヘッダーのホワイトリスト。このリストにない要求ヘッダーが要求で使用されている場合、その要求は CORS によって処理されません。
ここに値を設定すると、デフォルトの単純なリクエスト ヘッダーのリストが上書きされます。それらを失わないようにするには、追加するリクエスト ヘッダーをcorser.simpleRequestHeaders
: corser.simpleRequestHeaders.concat(["Authorization"])
で連結します。
デフォルト: 単純なリクエストヘッダー ( Accept
、 Accept-Language
、 Content-Language
、 Content-Type
、 Last-Event-ID
)。
responseHeaders
大文字と小文字を区別しない応答ヘッダーのホワイトリスト。このリストにない応答ヘッダーは、ユーザー エージェント (ブラウザー) によってフィルターで除外されます。
ここに値を設定すると、デフォルトの単純な応答ヘッダーのリストが上書きされます。これらを失わないようにするには、追加する応答ヘッダーをcorser.simpleResponseHeaders
: corser.simpleResponseHeaders.concat(["ETag"])
で連結します。
デフォルト: 単純な応答ヘッダー ( Cache-Control
、 Content-Language
、 Content-Type
、 Expires
、 Last-Modified
、 Pragma
)。
supportsCredentials
Cookie 資格情報を CORS リクエストの一部として転送できるかどうかを示すブール値。現在、この設定の恩恵を受けることができるのは、少数の HTML5 要素だけです。
デフォルト: false
。
maxAge
プリフライト要求がクライアント側のプリフライト結果キャッシュに保持される最大時間を秒単位で示す整数。
デフォルト: 設定されていません。
endPreflightRequests
CORS プリフライト要求を自動的に閉じるかどうかを示すブール値。
デフォルト: true
。
Origin X is not allowed by Access-Control-Allow-Origin
リクエストのOrigin
ヘッダーが、構成オブジェクトのorigins
プロパティで指定されたオリジンの 1 つと一致するかどうかを確認します。 origins
プロパティを設定していない場合は、次の質問に進んでください。
それでも解決しない場合は、リクエストで単純でないメソッドまたは 1 つ以上の単純ではないヘッダーが使用されている可能性があります (次の質問を参照)。仕様によれば、単純なメソッドのセットはGET
、 HEAD
、およびPOST
であり、単純なリクエスト ヘッダーのセットはAccept
、 Accept-Language
、 Content-Language
、 Content-Type
、およびLast-Event-ID
です。リクエストで他のメソッドまたはヘッダーを使用する場合は、構成オブジェクトのmethods
またはrequestHeaders
プロパティにそれらを明示的にリストする必要があります。
X-Requested-With
ヘッダーを使用するリクエストを許可したいと考えています。次の構成オブジェクトをcorser.create
に渡します。
corser.create({
requestHeaders: corser.simpleRequestHeaders.concat(["X-Requested-With"])
});
Request header field Content-Type is not allowed by Access-Control-Allow-Headers
デフォルト設定は、クライアントが「単純な」リクエスト、つまりメソッドとしてGET
、 HEAD
、 POST
送信し、 Accept
、 Accept-Language
、 Content-Language
、 Content-Type
などの一部のヘッダーを送信する場合にのみ機能しますContent-Type
重要な制限があります。 application/x-www-form-urlencoded
、 multipart/form-data
、およびtext/plain
のみが許可されます。
通常、API のContent-Type
はapplication/json
ですが、これはデフォルトでは許可されていません。 Content-Type
requestHeaders
キーの下の構成オブジェクトで明示的に指定する必要があります。
corser.create({
requestHeaders: corser.simpleRequestHeaders.concat(["Content-Type"])
});
Refused to get unsafe header "X"
が返されますブラウザーは、プリフライト リクエストで明示的に許可されていないすべての非単純な応答ヘッダーをブロックします。単純な応答ヘッダーのセットはCache-Control
、 Content-Language
、 Content-Type
、 Expires
、 Last-Modified
、 Pragma
です。他の応答ヘッダーにアクセスしたい場合は、構成オブジェクトのresponseHeaders
プロパティにそれらを明示的にリストする必要があります。
クライアントが応答のETag
ヘッダーを読み取ることができるようにしたいと考えています。次の構成オブジェクトをcorser.create
に渡します。
corser.create({
responseHeaders: corser.simpleResponseHeaders.concat(["ETag"])
});