Saya terjebak dengan masalah CORS ini, meskipun saya mengatur server (nginx / node.js) dengan header yang sesuai.
Saya dapat melihat di panel Jaringan Chrome -> Header Respons:
Access-Control-Allow-Origin:http://localhost
yang seharusnya melakukan trik.
Berikut kode yang sekarang saya gunakan untuk menguji:
var xhr = new XMLHttpRequest();
xhr.onload = function() {
console.log('xhr loaded');
};
xhr.open('GET', 'http://stackoverflow.com/');
xhr.send();
saya mendapat
XMLHttpRequest tidak dapat memuat http://stackoverflow.com/ . Origin http: // localhost tidak diizinkan oleh Access-Control-Allow-Origin.
Saya menduga itu masalah dalam skrip klien dan bukan konfigurasi server ...
Jawaban:
Chrome tidak mendukung localhost untuk permintaan CORS (bug dibuka pada 2010, ditandai WontFix pada 2014).
Untuk menyiasati ini, Anda dapat menggunakan domain seperti
lvh.me
(yang menunjuk 127.0.0.1 seperti localhost) atau mulai chrome dengan--disable-web-security
bendera (dengan asumsi Anda hanya menguji).sumber
Grrrr...
Per @ Beau menjawab, Chrome tidak mendukung permintaan CORS localhost, dan tidak mungkin ada perubahan dalam arah ini.
Saya menggunakan Allow-Control-Allow-Origin: * Ekstensi Chrome untuk mengatasi masalah ini. Ekstensi akan menambahkan Header HTTP yang diperlukan untuk CORS:
The kode sumber dipublikasikan di Github .
Perhatikan bahwa ekstensi memfilter semua URL secara default. Ini dapat merusak beberapa situs web (misalnya: Dropbox). Saya telah mengubahnya untuk memfilter hanya URL host lokal dengan filter URL berikut
sumber
Access-Control-Allow-Credentials: true
karena disetelAccess-Control-Allow-Origin
ke*
dan memiliki keduanyatrue
serta*
diblokir oleh browser. Jika menggunakan kredensial benar, Anda harus menggunakan asal non-wildcard. Saya merekomendasikan Moesif Origins dan CORS Changer Extension yang memungkinkan Anda mengubah tajuk sesuai keinginan.Masalah sebenarnya adalah bahwa jika kami menetapkan
-Allow-
untuk semua permintaan (OPTIONS
&POST
), Chrome akan membatalkannya. Kode berikut berfungsi untuk saya bersamaPOST
dengan LocalHost dengan Chromesumber
Chrome akan membuat permintaan dengan CORS dari a
localhost
asal saja. Ini bukan masalah dengan Chrome.Alasan Anda tidak dapat memuat
http://stackoverflow.com
adalah karenaAccess-Control-Allow-Origin
tajuk tidak mengizinkan sumber Andalocalhost
.sumber
Perbaikan ekstensi Chrome yang cepat dan kotor:
Moesif Orign & CORS Changer
Namun, Chrome mendukung permintaan lintas asal dari localhost. Pastikan untuk menambahkan tajuk
Access-Control-Allow-Origin
untuklocalhost
.sumber
Tidak ada ekstensi yang berfungsi untuk saya, jadi saya memasang proxy lokal sederhana. Dalam kasus saya https://www.npmjs.com/package/local-cors-proxy Ini adalah pengaturan 2 menit:
(dari situs mereka)
Bekerja seperti pesona bagi saya: aplikasi Anda memanggil proxy, yang memanggil server. Nol masalah CORS.
sumber
Saya memutuskan untuk tidak menyentuh header dan membuat pengalihan di sisi server sebagai gantinya dan itu wajan seperti pesona.
Contoh di bawah ini adalah untuk versi Angular saat ini (saat ini 9) dan mungkin kerangka kerja lainnya menggunakan webpacks DevServer. Tapi saya pikir prinsip yang sama akan bekerja pada backend lainnya.
Jadi saya menggunakan konfigurasi berikut di file proxy.conf.json :
Dalam kasus Angular saya melayani dengan konfigurasi itu:
Saya lebih suka menggunakan proxy di perintah serve, tetapi Anda juga dapat meletakkan konfigurasi ini ke angular.json seperti ini:
Lihat juga:
https://www.techiediaries.com/fix-cors-with-angular-cli-proxy-configuration/
https://webpack.js.org/configuration/dev-server/#devserverproxy
sumber