Saya mencoba untuk mendukung CORS dalam aplikasi Node.js saya yang menggunakan kerangka kerja Express.js. Saya telah membaca diskusi grup Google tentang cara menangani ini, dan membaca beberapa artikel tentang cara kerja CORS. Pertama, saya melakukan ini (kode ditulis dalam sintaks CoffeeScript):
app.options "*", (req, res) ->
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
# try: 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Methods', 'GET, OPTIONS'
# try: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
Sepertinya tidak berhasil. Sepertinya browser saya (Chrome) tidak mengirimkan permintaan OPSI awal. Ketika saya baru saja memperbarui blok untuk sumber daya saya perlu mengirimkan permintaan GET lintas-asal ke:
app.get "/somethingelse", (req, res) ->
# ...
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
res.header 'Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
Ini berfungsi (di Chrome). Ini juga berfungsi di Safari.
Saya telah membaca bahwa ...
Di browser yang menerapkan CORS, setiap permintaan GET atau POST asal silang didahului oleh permintaan OPSI yang memeriksa apakah GET atau POST OK.
Jadi pertanyaan utama saya adalah, mengapa ini tidak terjadi dalam kasus saya? Mengapa blok app.options saya tidak dipanggil? Mengapa saya perlu mengatur header di blok app.get utama saya?
sumber
Jawaban:
Untuk menjawab pertanyaan utama Anda, spesifikasi CORS hanya membutuhkan panggilan OPTIONS untuk mendahului POST atau GET jika POST atau GET memiliki konten atau header yang tidak sederhana di dalamnya.
Konten-Jenis yang memerlukan permintaan pra-penerbangan CORS (panggilan OPSI) adalah Jenis-Konten apa pun kecuali yang berikut :
application/x-www-form-urlencoded
multipart/form-data
text/plain
Setiap Tipe-Konten lain selain dari yang tercantum di atas akan memicu permintaan pra-penerbangan.
Adapun Header, setiap Header Permintaan selain dari berikut ini akan memicu permintaan pra-penerbangan:
Accept
Accept-Language
Content-Language
Content-Type
DPR
Save-Data
Viewport-Width
Width
Tajuk Permintaan lainnya akan memicu permintaan pra-penerbangan.
Jadi, Anda dapat menambahkan tajuk khusus seperti:,
x-Trigger: CORS
dan itu akan memicu permintaan pra-penerbangan dan menekan blok PILIHAN.Lihat Referensi API Web MDN - Permintaan Preflighted CORS
sumber
OPTIONS
blok tidak dikirim. Akan lebih baik jika memiliki daftar yang diterimaHEADERS
, atau yangcontent-types
memerlukanOPTIONS
, dll tetapi ini adalah awal yang baikSaya menemukan cara termudah adalah dengan menggunakan paket node.js kor . Penggunaan paling sederhana adalah:
Tentu saja ada banyak cara untuk mengkonfigurasi perilaku sesuai kebutuhan Anda; halaman yang ditautkan di atas menunjukkan sejumlah contoh.
sumber
cors({credentials: true, origin: true})
Coba lewati kontrol ke rute yang cocok berikutnya. Jika Express mencocokkan app.get rute terlebih dahulu, maka itu tidak akan melanjutkan ke rute opsi kecuali Anda melakukan ini (perhatikan penggunaan selanjutnya) :
Dalam hal mengatur barang-barang CORS, saya memasukkannya ke dalam middleware yang berfungsi dengan baik untuk saya:
sumber
config.allowedDomains
string yang dibatasi koma atau array?Untuk tetap dalam gagasan yang sama tentang perutean. Saya menggunakan kode ini:
Mirip dengan contoh http://enable-cors.org/server_expressjs.html
sumber
melakukan
dan tambahkan saja baris-baris ini di file utama Anda di mana permintaan Anda pergi (simpan sebelum rute apa pun)
sumber
app.options('*', cors())
// sertakan sebelum rute lainSaya telah membuat middleware yang lebih lengkap, cocok untuk mengekspresikan atau menghubungkan. Ini mendukung
OPTIONS
permintaan untuk pemeriksaan preflight. Perhatikan bahwa ini akan memungkinkan CORS mengakses apa pun, Anda mungkin ingin melakukan beberapa pemeriksaan jika Anda ingin membatasi akses.sumber
instal modul kor expressjs. Anda dapat mengikuti langkah-langkah ini>
Instalasi
Penggunaan Sederhana (Aktifkan Semua Permintaan CORS)
untuk detail lebih lanjut, kunjungi https://github.com/expressjs/cors
sumber
TypeError: Cannot read property 'headers' of undefined
Pengaturan aplikasi paling dasar.Lakukan sesuatu seperti ini:
sumber
Pengujian dilakukan dengan express + node + ionic running di ports yang berbeda.
Localhost:8100
Localhost:5000
sumber
pertama-tama instal kor di proyek Anda. Ambil terminal (command prompt) dan
cd
ke direktori proyek Anda dan jalankan perintah di bawah ini:Kemudian ambil file server.js dan ubah kode untuk menambahkan yang berikut di dalamnya:
Ini bekerja untuk saya ..
sumber
cors
jika Anda melakukanres.header
hal - hal itu.cors
adalah perpustakaan yang menangani semua itu untuk Anda. Hapus baris pertama & 3 Anda (AKA semuanya dengancors
) dan Anda akan menemukan bahwa itu masih berfungsi.res.header("Access-Control-Allow-Origin", "*");
Ini berfungsi untuk saya, karena ini adalah implementasi yang mudah di dalam rute, saya menggunakan meanjs dan berfungsi dengan baik, safari, chrome, dll.
sumber
Beberapa waktu lalu, saya menghadapi masalah ini jadi saya melakukan ini untuk memungkinkan CORS di aplikasi nodejs saya:
Pertama, Anda perlu menginstal
cors
dengan menggunakan perintah di bawah ini:Sekarang tambahkan kode berikut ke file awal aplikasi Anda seperti (
app.js or server.js
)sumber
Dalam saya
index.js
saya menambahkan:sumber
Access-Control-Allow-Origin = *
berarti bahwa Anda tidak akan dapat mengirim Cookie ke server, mereka akan ditolak oleh Kebijakan CORS - sumber: developer.mozilla.org/en-US/docs/Web/HTTP/… . Jadi, jangan gunakan ini jika Anda ingin menggunakan cookie.Jika Anda ingin membuatnya spesifik pengontrol, Anda dapat menggunakan:
Harap dicatat bahwa ini juga akan memungkinkan iframe.
sumber
Dapat merujuk kode di bawah ini untuk hal yang sama. Sumber: Academind / node-restful-api
sumber
const app = express();
dan berfungsi! Saya pikir penting untuk menyebutkannya.Solusi paling sederhana saya dengan Express 4.2.0 (EDIT: Tampaknya tidak berfungsi di 4.3.0) adalah:
Saya kira melakukan
app.all('/result', ...)
akan bekerja juga ...sumber
Jawaban termudah adalah dengan hanya menggunakan paket kor .
Itu akan memungkinkan CORS di seluruh papan. Jika Anda ingin mempelajari cara mengaktifkan CORS tanpa modul luar , yang Anda perlukan hanyalah middleware Express yang menetapkan header 'Access-Control-Allow-Origin' . Itu minimum yang Anda butuhkan untuk membolehkan domain lintas permintaan dari browser ke server Anda.
sumber
Menggunakan Express Middleware sangat bagus untuk saya. Jika Anda sudah menggunakan Express, cukup tambahkan aturan middleware berikut. Seharusnya mulai bekerja.
Referensi
sumber
Di bawah ini bekerja untuk saya, semoga membantu seseorang!
Dapatkan referensi dari https://expressjs.com/en/resources/middleware/cors.html#configuring-cors
sumber
Saya merasa sangat mudah melakukan ini dengan paket permintaan npm ( https://www.npmjs.com/package/request )
Kemudian saya mendasarkan solusi saya pada posting ini http://blog.javascripting.com/2015/01/17/dont-hassle-with-cors/
sumber
Dalam naskah, jika Anda ingin menggunakan kor paket node.js
Jika Anda tidak ingin menggunakan pustaka bagian ketiga untuk penanganan kesalahan kors, Anda perlu mengubah metode handleCORSErrors ().
Untuk menggunakan file app.ts
sumber
Ini serupa dengan jawaban Pat dengan perbedaan yang saya selesaikan dengan res.sendStatus (200); bukannya next ();
Kode akan menangkap semua permintaan dari jenis metode OPSI dan mengirim kembali header kontrol akses.
Kode menerima CORS dari semua sumber sebagaimana diminta dalam pertanyaan. Namun, akan lebih baik untuk mengganti * dengan asal tertentu yaitu http: // localhost: 8080 untuk mencegah penyalahgunaan.
Karena kami menggunakan metode app.options alih-alih app.use-metode, kami tidak perlu melakukan pemeriksaan ini:
yang bisa kita lihat di beberapa jawaban lain.
Saya menemukan jawabannya di sini: http://johnzhang.io/options-request-in-express .
sumber
Anda dapat menggunakan Express middleware, memblokir domain dan metode Anda.
sumber
Kami dapat menghindari CORS dan meneruskan permintaan ke server lain sebagai gantinya:
sumber
Saya menggunakan langkah-langkah berikut untuk aplikasi web saya dan saya berhasil:
Tambahkan paket cors ke express:
Tambahkan baris berikut setelah konfigurasi bodyParser . Saya mengalami beberapa masalah saat menambahkan sebelum bodyParser:
sumber
Pendekatan paling sederhana adalah memasang modul kor di proyek Anda menggunakan:
Kemudian dalam file server Anda impor menggunakan yang berikut:
Maka cukup gunakan sebagai middleware seperti ini:
Semoga ini membantu!
sumber
Jika saya jadi Anda @OP saya akan mengubah paradigma pemrograman saya.
dengan asumsi Anda membuat CORS ini diblokir karena Anda membuat permintaan ke localhost atau yang serupa.
Akhirnya, jika Anda akan menggunakan optoins produksi seperti
Google Cloud Platform
atauHeroku
, Anda tidak perlu khawatir tentang CORS seperti mengizinkan asal atau apa pun saat dalam produksi.jadi ketika menguji server gunakan saja
postman
dan Anda tidak akan mendapatkan CORS diblokir, setelah itu menyebarkan server Anda dan kemudian bekerja pada klien Anda.sumber
/ * pertama-tama, dan ini mungkin masalah di antara para junior devs di luar sana, seperti saya: pastikan untuk menggunakan "lambda" >>>> "` "dan bukan" '"dalam metode pengambilan Anda ! * /
`` `const response = await fetch (
https://api....
);/ plus, artikel berikut ini sangat dianjurkan: https://developer.edamam.com/api/faq /
sumber
sederhana itu sulit:
sumber
Coba ini di file js utama Anda:
Ini harus menyelesaikan masalah Anda
sumber