Implementasi CORS yang sangat dapat dikonfigurasi dan kompatibel dengan middleware untuk Node.js.
Access-Control-Request-Headers
kosong.OPTIONS
, centang opsi endPreflightRequests
.(err, matches)
bukan hanya (matches)
. Lihat example/express/
untuk contoh yang berfungsi.
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);
Lihat example/connect/
untuk contoh yang berfungsi.
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
biasa 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);
Membuat pendengar permintaan Corser yang menghasilkan header respons yang sesuai untuk mengaktifkan CORS semudah:
corser.create()
Ini setara dengan menyetel header respons Access-Control-Allow-Origin: *
. Jika Anda ingin membatasi asal, atau mengizinkan header permintaan atau respons yang lebih canggih, Anda harus meneruskan objek konfigurasi ke corser.create
.
Corser akan secara otomatis mengakhiri permintaan pra-penerbangan untuk Anda. Permintaan preflight adalah permintaan OPTIONS
khusus yang dikirimkan browser dalam kondisi tertentu untuk bernegosiasi dengan server metode, header permintaan, dan header respons apa yang diizinkan untuk permintaan CORS. Jika Anda perlu menggunakan metode OPTIONS
untuk hal lain, cukup setel endPreflightRequests
ke false
dan hentikan sendiri permintaan tersebut:
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.
}
});
Objek konfigurasi dengan properti berikut dapat diteruskan ke corser.create
.
origins
Daftar asal yang peka huruf besar dan kecil. Jika permintaan berasal dari asal yang tidak ada dalam daftar ini, maka tidak akan ditangani oleh CORS. Untuk menerima semua asal (perilaku Access-Control-Allow-Origin: *
), hilangkan properti atau atur ke array kosong ( []
).
Untuk memungkinkan pemeriksaan asal dinamis, fungsi (origin, callback)
dapat diteruskan sebagai ganti array. origin
adalah header Origin, callback
adalah fungsi (err, matches)
, dengan matches
adalah tanda boolean yang menunjukkan apakah header Origin yang diberikan cocok atau tidak.
Default: semua asal diterima.
methods
Daftar metode yang diizinkan dalam huruf besar. Jika permintaan menggunakan metode yang tidak ada dalam daftar ini, maka tidak akan ditangani oleh CORS.
Menetapkan nilai di sini akan menimpa daftar metode sederhana default. Agar tidak hilang, gabungkan metode yang ingin Anda tambahkan dengan corser.simpleMethods
: corser.simpleMethods.concat(["PUT", "DELETE"])
.
Default: metode sederhana ( GET
, HEAD
, POST
).
requestHeaders
Daftar header permintaan yang tidak membedakan huruf besar dan kecil. Jika permintaan menggunakan header permintaan yang tidak ada dalam daftar ini, maka tidak akan ditangani oleh CORS.
Menetapkan nilai di sini akan menimpa daftar header permintaan sederhana default. Agar tidak hilang, gabungkan header permintaan yang ingin Anda tambahkan dengan corser.simpleRequestHeaders
: corser.simpleRequestHeaders.concat(["Authorization"])
.
Default: header permintaan sederhana ( Accept
, Accept-Language
, Content-Language
, Content-Type
, Last-Event-ID
).
responseHeaders
Daftar header respons yang tidak peka huruf besar dan kecil. Setiap header respons yang tidak ada dalam daftar ini akan disaring oleh agen pengguna (browser).
Menetapkan nilai di sini akan menimpa daftar header respons sederhana default. Agar tidak hilang, gabungkan header respons yang ingin Anda tambahkan dengan corser.simpleResponseHeaders
: corser.simpleResponseHeaders.concat(["ETag"])
.
Default: header respons sederhana ( Cache-Control
, Content-Language
, Content-Type
, Expires
, Last-Modified
, Pragma
).
supportsCredentials
Boolean yang menunjukkan apakah kredensial cookie dapat ditransfer sebagai bagian dari permintaan CORS. Saat ini, hanya beberapa elemen HTML5 yang dapat memanfaatkan pengaturan ini.
Bawaan: false
.
maxAge
Bilangan bulat yang menunjukkan jumlah waktu maksimum dalam hitungan detik permintaan preflight disimpan di cache hasil preflight sisi klien.
Bawaan: tidak disetel.
endPreflightRequests
Boolean yang menunjukkan apakah permintaan preflight CORS harus ditutup secara otomatis.
Bawaan: true
.
Origin X is not allowed by Access-Control-Allow-Origin
Periksa apakah header Origin
permintaan Anda cocok dengan salah satu asal yang disediakan di properti origins
objek konfigurasi. Jika Anda tidak menyetel properti origins
apa pun, lanjutkan ke pertanyaan berikutnya.
Jika itu tidak membantu, permintaan Anda mungkin menggunakan metode yang tidak sederhana atau satu atau lebih header yang tidak sederhana (lihat pertanyaan berikutnya). Menurut spesifikasinya, kumpulan metode sederhana adalah GET
, HEAD
, dan POST
, dan kumpulan header permintaan sederhana adalah Accept
, Accept-Language
, Content-Language
, Content-Type
, dan Last-Event-ID
. Jika permintaan Anda menggunakan metode atau header lain , Anda harus mencantumkannya secara eksplisit di properti methods
atau requestHeaders
dari objek konfigurasi.
Anda ingin mengizinkan permintaan yang menggunakan header X-Requested-With
. Berikan objek konfigurasi berikut ke corser.create
:
corser.create({
requestHeaders: corser.simpleRequestHeaders.concat(["X-Requested-With"])
});
Request header field Content-Type is not allowed by Access-Control-Allow-Headers
Konfigurasi default hanya akan berfungsi jika klien mengirimkan permintaan "sederhana", yaitu GET
, HEAD
, POST
sebagai metode, dan beberapa header seperti Accept
, Accept-Language
, Content-Language
, dan Content-Type
, dll. Content-Type
memiliki batasan penting: hanya application/x-www-form-urlencoded
, multipart/form-data
, dan text/plain
yang diperbolehkan.
Biasanya Content-Type
API adalah application/json
, dan ini tidak diperbolehkan secara default. Content-Type
perlu ditentukan secara eksplisit dalam objek konfigurasi di bawah kunci requestHeaders
:
corser.create({
requestHeaders: corser.simpleRequestHeaders.concat(["Content-Type"])
});
Refused to get unsafe header "X"
Browser Anda memblokir setiap header respons non-sederhana yang tidak diizinkan secara eksplisit dalam permintaan preflight. Kumpulan header respons sederhana adalah Cache-Control
, Content-Language
, Content-Type
, Expires
, Last-Modified
, Pragma
. Jika Anda ingin mengakses header respons lainnya , Anda harus mencantumkannya secara eksplisit di properti responseHeaders
pada objek konfigurasi.
Anda ingin mengizinkan klien membaca header respons ETag
. Berikan objek konfigurasi berikut ke corser.create
:
corser.create({
responseHeaders: corser.simpleResponseHeaders.concat(["ETag"])
});