Saya telah menemukan masalah CORS beberapa kali dan biasanya dapat memperbaikinya tetapi saya ingin benar-benar mengerti dengan melihat ini dari paradigma tumpukan MEAN.
Sebelumnya saya hanya menambahkan middleware di server ekspres saya untuk menangkap hal-hal ini, tetapi sepertinya ada beberapa jenis pre-hook yang tidak memenuhi permintaan saya.
Bidang header permintaan Access-Control-Allow-Headers tidak diizinkan oleh Access-Control-Allow-Header dalam respons preflight
Saya berasumsi bahwa saya bisa melakukan ini:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","*")
})
atau setara tetapi ini tampaknya tidak memperbaikinya. Saya juga tentu saja mencoba
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Headers","Access-Control-Allow-Headers")
})
Masih belum berhasil.
Access-Control-Request-Headers
header("Access-Control-Allow-Headers: Content-Type")
Inilah yang perlu Anda tambahkan untuk membuatnya berfungsi.
Browser mengirimkan permintaan preflight (dengan jenis metode OPSI) untuk memeriksa apakah layanan yang dihosting di server diizinkan untuk diakses dari browser di domain yang berbeda. Menanggapi permintaan preflight jika Anda menyuntikkan header di atas, browser memahami bahwa tidak apa-apa untuk melakukan panggilan lebih lanjut dan saya akan mendapatkan respons yang valid untuk panggilan GET / POST saya yang sebenarnya. Anda dapat membatasi domain tempat akses diberikan dengan menggunakan Access-Control-Allow-Origin "," localhost, xvz.com "alih-alih *. (* akan memberikan akses ke semua domain)
sumber
*
untuk...-Origin
dantrue
untuk...-Credentials
. Itu tidak akan gagal untuk permintaan non-kredensial, tetapi juga tidak akan berfungsi untuk permintaan kredensial. Lihat tautan yang saya poskan di jawaban saya.response.setHeader("Access-Control-Allow-Headers", "*")
? Apa implikasi keamanan dari melakukan ini?Masalah ini diselesaikan dengan
Khususnya dalam proyek saya (express.js / nodejs)
Memperbarui:
Setiap kesalahan waktu:
Access-Control-Allow-Headers is not allowed by itself in preflight response
kesalahan Anda dapat melihat apa yang salah dengan alat pengembang chrome :kesalahan di atas tidak ada
Content-Type
sehingga tambahkan stringContent-Type
keAccess-Control-Allow-Headers
sumber
Jawaban yang diterima ok, tapi saya kesulitan memahaminya. Jadi, inilah contoh sederhana untuk memperjelasnya.
Dalam permintaan ajax saya, saya memiliki header Otorisasi standar.
Kode ini menghasilkan kesalahan dalam pertanyaan. Apa yang harus saya lakukan di server nodejs saya adalah menambahkan Otorisasi di header yang diizinkan:
sumber
Untuk menambah jawaban lain. Saya memiliki masalah yang sama dan ini adalah kode yang saya gunakan di server ekspres saya untuk memungkinkan panggilan REST:
Apa yang pada dasarnya dilakukan oleh kode ini adalah memotong semua permintaan dan menambahkan header CORS, kemudian melanjutkan dengan rute normal saya. Ketika ada permintaan PILIHAN, itu hanya merespons dengan tajuk CORS.
EDIT: Saya menggunakan perbaikan ini untuk dua server express nodejs terpisah pada mesin yang sama. Pada akhirnya saya memperbaiki masalah dengan server proxy sederhana.
sumber
Saya sendiri mengalami masalah ini, dalam konteks ASP.NET pastikan Web.config Anda terlihat seperti ini:
Perhatikan nilai Otorisasi untuk
Access-Control-Allow-Headers
kunci tersebut. Saya kehilangan nilai Otorisasi, konfigurasi ini memecahkan masalah saya.sumber
Sangat bagus saya menggunakan ini pada proyek silex
sumber
Di Chrome:
Bagi saya, kesalahan ini dipicu oleh spasi tambahan di URL panggilan ini.
sumber
Hanya untuk menambahkan bahwa Anda dapat menempatkan header itu juga ke file konfigurasi Webpack. Saya membutuhkan mereka seperti dalam kasus saya karena saya menjalankan server dev webpack.
sumber
res.setHeader ('Access-Control-Allow-Headers', '*');
sumber
Saya menerima kesalahan OP yang dinyatakan menggunakan Django, React, dan django-cors-header lib. Untuk memperbaikinya dengan tumpukan ini, lakukan hal berikut:
Di settings.py tambahkan di bawah ini per dokumentasi resmi .
sumber
masalah ini terjadi ketika kami membuat tajuk khusus untuk permintaan. Permintaan ini yang menggunakan
HTTP OPTIONS
dan menyertakan beberapa tajuk.Header yang diperlukan untuk permintaan ini adalah
Access-Control-Request-Headers
, yang harus menjadi bagian dari header respons dan harus memungkinkan permintaan dari semua asal. Kadang-kadang perluContent-Type
juga di header respons. Jadi tajuk respons Anda harus seperti itu -sumber
Dalam panggilan API Post, kami mengirim data dalam badan permintaan. Jadi jika kami akan mengirim data dengan menambahkan header tambahan apa pun ke panggilan API. Kemudian panggilan API OPSI pertama akan terjadi dan kemudian panggilan pos akan terjadi. Karena itu, Anda harus menangani panggilan API OPSI terlebih dahulu.
Anda dapat menangani masalah ini dengan menulis filter dan di dalamnya Anda harus memeriksa opsi panggilan API dan mengembalikan 200 status OK. Di bawah ini adalah kode contoh:
sumber
Jika Anda mencoba menambahkan tajuk khusus pada tajuk permintaan, Anda harus memberi tahu server bahwa tajuk tertentu diizinkan untuk terjadi. Tempat untuk melakukannya adalah di kelas yang memfilter permintaan. Dalam contoh yang ditunjukkan di bawah ini, nama header khusus adalah "type":
sumber
Setelah menghabiskan hampir sehari, saya baru tahu bahwa menambahkan dua kode di bawah ini menyelesaikan masalah saya.
Tambahkan ini di Global.asax
dan di konfigurasi web tambahkan di bawah ini
sumber
Saya juga menghadapi masalah yang sama di Angular 6. Saya memecahkan masalah dengan menggunakan kode di bawah ini. Tambahkan kode dalam file component.ts.
sumber
Masalah yang sama yang saya hadapi.
Saya melakukan perubahan sederhana.
sumber
Pesan jelas bahwa 'Otorisasi' tidak diizinkan di API. Atur
Header Akses-Kontrol-Bolehkan: "Tipe Konten, Otorisasi"
sumber
Menambahkan kors dalam fungsi get Adalah yang bekerja untuk saya
sumber