Saya menggunakan AngularJS $ http di sisi klien untuk mengakses titik akhir aplikasi API Web ASP.NET di sisi server. Karena klien di-host di domain yang berbeda dengan server, saya memerlukan CORS. Ia bekerja untuk $ http.post (url, data). Tetapi segera setelah saya mengautentikasi pengguna dan membuat permintaan melalui $ http.get (url), saya mendapatkan pesannya
Header 'Access-Control-Allow-Origin' berisi beberapa nilai 'http://127.0.0.1:9000, http://127.0.0.1:9000', tetapi hanya satu yang diperbolehkan. Oleh karena itu, asal 'http://127.0.0.1:9000' tidak diizinkan akses.
Fiddler menunjukkan kepada saya bahwa memang ada dua entri header dalam permintaan get setelah permintaan opsi berhasil. Apa dan di mana saya melakukan sesuatu yang salah?
Memperbarui
Saat saya menggunakan jQuery $ .get dan bukan $ http.get, pesan kesalahan yang sama muncul. Jadi ini sepertinya tidak ada masalah dengan AngularJS. Tapi dimana salahnya?
asp.net-web-api
cors
angularjs-http
Papa Mufflon
sumber
sumber
Jawaban:
saya tambahkan
config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))
sebaik
app.UseCors(CorsOptions.AllowAll);
di server. Ini menghasilkan dua entri header. Cukup gunakan yang terakhir dan berhasil.
sumber
Kami mengalami masalah ini karena kami telah menyiapkan CORS sesuai dengan praktik terbaik (mis. Http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ) DAN JUGA memiliki tajuk khusus
<add name="Access-Control-Allow-Origin" value="*"/>
di web.config.Hapus entri web.config, dan semuanya baik-baik saja.
Bertentangan dengan jawaban @ mww, kami masih memiliki
EnableCors()
di WebApiConfig.cs DAN anEnableCorsAttribute
di controller. Saat kami mengeluarkan salah satunya, kami mengalami masalah lain.sumber
Saya menggunakan Cors 5.1.0.0, setelah banyak sakit kepala, saya menemukan masalah tersebut adalah duplikat header Access-Control-Allow-Origin & Access-Control-Allow-Header dari server
Dihapus
config.EnableCors()
dari file WebApiConfig.cs dan hanya mengatur[EnableCors("*","*","*")]
atribut pada kelas ControllerLihat artikel ini untuk detail lebih lanjut.
sumber
Tambahkan ke Register WebApiConfig
Atau web.config
TAPI TIDAK KEDUA
sumber
Sebenarnya Anda tidak dapat menyetel banyak header
Access-Control-Allow-Origin
(atau setidaknya tidak akan berfungsi di semua browser). Sebagai gantinya Anda dapat menetapkan variabel lingkungan secara kondisional dan kemudian menggunakannya dalamHeader
direktif:Jadi dalam contoh ini header respon akan ditambahkan hanya jika header permintaan
Origin
cocok dengan RegExp:^(https?://localhost|https://[a-z]+\.my\.base\.domain)$
(pada dasarnya berarti localhost melalui HTTP atau HTTPS dan * .my.base.domain melalui HTTPS).Ingatlah untuk mengaktifkan
setenvif
modul.Dokumen:
BTW. The
}e
dalam%{ORIGIN_SUB_DOMAIN}e
tidak salah ketik. Begitulah cara Anda menggunakan variabel lingkungan dalamHeader
direktif.sumber
Saya juga memiliki OWIN serta WebAPI saya yang keduanya tampaknya membutuhkan CORS diaktifkan secara terpisah yang pada gilirannya menciptakan
'Access-Control-Allow-Origin' header contains multiple values
kesalahan.Saya akhirnya menghapus SEMUA kode yang mengaktifkan CORS dan kemudian menambahkan yang berikut ini ke
system.webServer
node Web.Config:Melakukan ini memenuhi persyaratan CORS untuk OWIN (mengizinkan masuk) dan untuk WebAPI (mengizinkan panggilan API), tetapi itu menciptakan masalah baru:
OPTIONS
metode tidak dapat ditemukan selama preflight untuk panggilan API saya. Perbaikan untuk itu sederhana - saya hanya perlu menghapus yang berikut ini darihandlers
node my Web.Config:Semoga ini bisa membantu seseorang.
sumber
Server Apache:
Saya menghabiskan biaya yang sama, tetapi itu karena saya tidak memiliki tanda kutip (") tanda bintang di file saya yang memberikan akses ke server, misalnya '.htaccess.':
Anda mungkin juga memiliki file '.htaccess' dalam folder dengan keluar '.htaccess' lainnya, mis
Dalam kasus Anda, bukan tanda bintang '*' akan menjadi
http://127.0.0.1:9000
server ip ( ) yang Anda beri izin untuk menyajikan data.ASP.NET:
Periksa apakah tidak ada duplikat 'Access-Control-Allow-Origin' di kode Anda.
Alat pengembang:
Dengan Chrome, Anda dapat memverifikasi header permintaan Anda. Tekan tombol F12 dan pergi ke tab 'Jaringan', sekarang jalankan permintaan AJAX dan akan muncul di daftar, klik dan berikan semua informasi yang ada.
sumber
Ini terjadi ketika Anda memiliki opsi Cors yang dikonfigurasi di beberapa lokasi. Dalam kasus saya, saya memilikinya di level pengontrol serta di Startup.Auth.cs / ConfigureAuth.
Pemahaman saya adalah jika Anda ingin aplikasinya luas maka cukup konfigurasikan di bawah Startup.Auth.cs / ConfigureAuth seperti ini ... Anda perlu referensi ke Microsoft.Owin.Cors
Jika Anda lebih suka menyimpannya di level pengontrol maka Anda dapat memasukkannya di level Pengontrol.
sumber
jika Anda berada di IIS Anda perlu mengaktifkan CORS di web.config, maka Anda tidak perlu mengaktifkannya di App_Start / WebApiConfig.cs metode Register
Solusi saya adalah, mengomentari baris di sini:
dan tulis di web.config:
sumber
Ini juga dapat terjadi tentu saja jika Anda benar-benar menyetel
Access-Control-Allow-Origin
tajuk Anda agar memiliki beberapa nilai - Misalnya, daftar nilai yang dipisahkan koma, yang semacam didukung di RFC tetapi sebenarnya tidak didukung oleh sebagian besar browser utama. Perhatikan bahwa RFC berbicara tentang cara mengizinkan lebih dari satu domain tanpa menggunakan '*' juga.Misalnya, Anda bisa mendapatkan kesalahan itu di Chrome dengan menggunakan tajuk seperti ini:
Access-Control-Allow-Origin: http://test.mysite.com, http://test2.mysite.com
Ini masuk
Chrome Version 64.0.3282.186 (Official Build) (64-bit)
Perhatikan bahwa jika Anda mempertimbangkan ini karena CDN, dan Anda menggunakan Akamai, Anda mungkin ingin mencatat bahwa Akamai tidak akan menyimpan cache di server jika Anda menggunakan
Vary:Origin
, cara yang disarankan banyak orang untuk mengatasi masalah ini.Anda mungkin harus mengubah cara kunci cache Anda dibuat, menggunakan perilaku respons "Modifikasi ID Cache". Lebih detail tentang masalah ini dalam pertanyaan StackOverflow terkait ini
sumber
Access-Control-Allow-Origin: http://test.mysite.com http://test2.mysite.com
. Itu akan menjadi cara yang benar, tetapi browser tidak mengikuti standar di sini ( sumber ).Sangat bodoh dan sederhana:
Masalah ini terjadi pada saya ketika memiliki dua waktu
Header always set Access-Control-Allow-Origin *
di dalam file konfigurasi Apache saya. Sekali denganVirtualHost
tag dan sekali di dalamLimit
tag:Menghapus satu entri menyelesaikan masalah.
Saya kira di posting asli itu akan menjadi dua kali:
sumber
baru saja mengalami masalah ini dengan server nodejs.
inilah cara saya memperbaikinya.
saya menjalankan server node saya melalui a
nginx proxy
dan saya mengatur nginx dannode
keduanyaallow cross domain requests
dan tidak seperti itu jadi saya menghapusnya dari nginx dan meninggalkannya di node dan semuanya baik-baik saja.sumber
rack-cors
permata menangani hal-hal CORS. Bam, diperbaiki.Saya menghadapi masalah yang sama dan inilah yang saya lakukan untuk mengatasinya:
Di layanan WebApi, di dalam Global.asax saya telah menulis kode berikut:
Di sini kode ini hanya mengizinkan pra-penerbangan dan permintaan token untuk menambahkan "Access-Control-Allow-Origin" dalam respons jika tidak, saya tidak akan menambahkannya.
Ini blog saya tentang implementasinya: https://ibhowmick.wordpress.com/2018/09/21/cross-domain-token-based-authentication-with-web-api2-and-jquery-angular-5-angular- 6 /
sumber
bagi mereka yang menggunakan IIS dengan php, di IIS itu sisi server perbarui file web.config itu direktori root (wwwroot) dan tambahkan ini
setelah itu restart server IIS, ketik IISReset di RUN dan enter
sumber
Berikut contoh lain yang mirip dengan contoh di atas bahwa Anda hanya boleh memiliki satu file konfigurasi yang menentukan letak CORS: Ada dua file web.config di server IIS pada jalur di direktori yang berbeda, dan salah satunya disembunyikan di direktori virtual. Untuk mengatasinya saya menghapus file konfigurasi root level karena path tersebut menggunakan file config di direktori virtual. Harus memilih salah satu.
sumber
Header 'Access-Control-Allow-Origin' berisi beberapa nilai
ketika saya menerima kesalahan ini saya menghabiskan banyak waktu mencari solusi untuk ini tetapi tidak ada yang berhasil, akhirnya saya menemukan solusi untuk masalah ini yang sangat sederhana. ketika header '' Access-Control-Allow-Origin 'ditambahkan lebih dari satu kali ke respons Anda, kesalahan ini terjadi, periksa apache.conf atau httpd.conf (server Apache), skrip sisi server, dan hapus header entri yang tidak diinginkan dari file-file ini .
sumber