XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
Saya membaca tentang permintaan ajax lintas domain, dan memahami masalah keamanan yang mendasarinya. Dalam kasus saya, 2 server berjalan secara lokal, dan ingin mengaktifkan permintaan lintas domain selama pengujian.
localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
Saya mengeluarkan permintaan ajax untuk localhost:8080 - GAE server
sementara halaman saya diambil dari server node. Apa yang paling mudah, dan paling aman (Tidak ingin memulai chrome dengan disable-web-security
opsi). Jika saya harus berubah 'Content-Type'
, haruskah saya melakukannya di server node? Bagaimana?
Jawaban:
Karena mereka berjalan pada port yang berbeda, mereka berbeda JavaScript
origin
. Tidak masalah mereka menggunakan mesin / nama host yang sama.Anda perlu mengaktifkan CORS di server (localhost: 8080). Lihatlah situs ini: http://enable-cors.org/
Yang perlu Anda lakukan adalah menambahkan header HTTP ke server:
Atau, untuk kesederhanaan:
Pemikiran tidak menggunakan "*" jika server Anda mencoba mengatur cookie dan Anda menggunakan
withCredentials = true
Anda dapat membaca lebih lanjut tentang
withCredentials
di sinisumber
Access-Control-Allow-Origin
header yang diberikan harus menjadi header yang ditambahkan ke respons HTTP yang dikirim oleh server. Header ini harus menjadi bagian dari respons server, tidak perlu menjadi bagian dari permintaan klien . Khususnya apa yang terjadi adalah sebelum klien membuat permintaan aktual yang Anda inginkan, browser mengirimOPTIONS
permintaan sebelumnya, dan jika respons server terhadapOPTIONS
permintaan itu tidak mengandung header, browser tidak akan mengirim permintaan yang Anda inginkan.Jika Anda memerlukan penyelesaian cepat di Chrome untuk permintaan ajax, plugin chrome ini secara otomatis memungkinkan Anda untuk mengakses situs mana pun dari sumber apa pun dengan menambahkan header respons yang tepat
Ekstensi Chrome Allow-Control-Allow-Origin: *
sumber
Anda harus mengaktifkan CORS untuk menyelesaikan ini
jika aplikasi Anda dibuat dengan node.js sederhana
atur di tajuk respons Anda
jika aplikasi Anda dibuat dengan kerangka kerja ekspres
gunakan middleware CORS seperti
dan melamar via
Berikut adalah dua tautan referensi
sumber
config.allowedDomains
. katakan dalam kasus saya uri apa yang harus saya taruh di sana?*
atauspecific domain
Anda ingin memberikan akses.app.configure()
bukan kesalahan fungsi?Saya menerima jawaban @Rocket Hazmat karena itu menuntun saya ke solusi. Memang di server GAE saya perlu mengatur header. Saya harus mengatur ini
pengaturan hanya
"Access-Control-Allow-Origin"
memberi kesalahanJuga, jika token auth perlu dikirim, tambahkan ini juga
Juga, pada klien, atur
withCredentials
ini menyebabkan 2 permintaan dikirim ke server, satu dengan
OPTIONS
. Cookie auth tidak dikirim bersamaan, karenanya harus memperlakukan auth luar.sumber
Di router.js cukup tambahkan kode sebelum memanggil metode get / post. Ini bekerja untuk saya tanpa kesalahan.
sumber
Saya menghadapi masalah saat memanggil sumber daya asal lintas menggunakan ajax dari chrome.
Saya telah menggunakan simpul js dan server http lokal untuk menggunakan aplikasi simpul js saya.
Saya mendapatkan respons kesalahan, ketika saya mengakses sumber daya lintas asal
Saya menemukan satu solusi untuk itu,
1) Saya telah menambahkan kode di bawah ini ke file app.js saya
2) Di halaman html saya disebut sumber daya lintas menggunakan
$.getJSON();
sumber
Jika Anda menggunakan express, Anda dapat menggunakan cors middleware sebagai berikut:
sumber
Tambahkan ini ke Server NodeJS Anda di bawah impor:
sumber
Jika Anda mendapatkan 403 setelah itu harap kurangi filter di WEB.XML konfigurasi kucing jantan sebagai berikut:
sumber
Saya akhirnya mendapat jawaban untuk apache Tomcat8
Anda harus mengedit file tomcat web.xml.
mungkin itu akan berada di dalam folder webapps,
temukan dan edit
Ini akan memungkinkan Access-Control-Allow-Origin semua host. Jika Anda perlu mengubahnya dari semua host menjadi hanya host Anda, Anda dapat mengedit
kode di atas dari * ke http Anda : // your_public_IP atau http://www.example.com
Anda dapat merujuk di sini dokumentasi filter Tomcat
Terima kasih
sumber
Hai Ini adalah cara untuk menyelesaikan masalah CORS di node. Cukup tambahkan baris ini di server "api" di Node.js (atau apa pun file server Anda), sebelum itu pastikan untuk menginstal "cors"
sumber
gunakan dataType: 'jsonp', bekerja untuk saya.
sumber
Untuk PHP, gunakan ini untuk mengatur tajuk.
sumber
tambahkan ini ke rute Anda yang Anda panggil dari front-end. Contoh jika Anda memanggil http: // localhost: 3000 / pengguna / daftar, Anda harus menambahkan fragmen kode ini pada file .js back-end Anda yang diletakkan oleh rute ini.
sumber
Jika ada yang mencari solusi, jika Anda menggunakan express di sini adalah solusi cepat.
1) pasang kor menggunakan npm
npm install cors --save
2) impor [memerlukan]
const cors = require('cors')
3) menggunakannya sebagai middleware
app.use(cors())
untuk perincian insatll dan penggunaan kor . Itu dia, semoga berhasil.
sumber
Jika Anda berada di Google Chrome, coba pasang pengaya ini:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related
sumber