Saya telah memanggil API pihak ketiga menggunakan Jquery AJAX. Saya mendapatkan kesalahan berikut di konsol:
Cross-Origin Read Blocking (CORB) memblokir respons lintas-sumber MY URL dengan aplikasi tipe MIME / json. Lihat https://www.chromestatus.com/feature/5629709824032768 untuk lebih jelasnya.
Saya telah menggunakan kode berikut untuk panggilan Ajax:
$.ajax({
type: 'GET',
url: My Url,
contentType: 'application/json',
dataType:'jsonp',
responseType:'application/json',
xhrFields: {
withCredentials: false
},
headers: {
'Access-Control-Allow-Credentials' : true,
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Methods':'GET',
'Access-Control-Allow-Headers':'application/json',
},
success: function(data) {
console.log(data);
},
error: function(error) {
console.log("FAIL....=================");
}
});
Ketika saya memeriksa di Fiddler, saya sudah mendapat data sebagai tanggapan tetapi tidak dalam metode sukses Ajax.
Tolong bantu saya.
Jawaban:
Anda membuat permintaan JSONP, tetapi server merespons dengan JSON.
Browser menolak untuk mencoba memperlakukan JSON sebagai JSONP karena ini akan berisiko keamanan. (Jika browser tidak mencoba untuk mengobati JSON sebagai JSONP maka akan, di terbaik, gagal).
Lihat pertanyaan ini untuk detail lebih lanjut tentang apa itu JSONP. Perhatikan bahwa ini adalah peretasan yang buruk untuk mengatasi Kebijakan Asal yang Sama yang digunakan sebelum CORS tersedia. CORS adalah solusi yang jauh lebih bersih, lebih aman, dan lebih kuat untuk masalah ini.
Sepertinya Anda mencoba membuat permintaan lintas sumber dan membuang semua yang terpikirkan oleh Anda dalam satu tumpukan besar instruksi yang saling bertentangan.
Anda perlu memahami cara kerja kebijakan Asal yang Sama.
Lihat pertanyaan ini untuk panduan mendalam.
Sekarang beberapa catatan tentang kode Anda:
Hapus itu.
Pindahkan ini. (Anda dapat membuat server merespons dengan JSONP, tetapi CORS lebih baik).
Ini bukan opsi yang didukung oleh jQuery.ajax. Pindahkan ini.
Ini adalah defaultnya. Kecuali Anda menyetelnya ke true dengan ajaxSetup, hapus ini.
sumber
https://www.chromium.org/Home/chromium-security/corb-for-developers
Saya harus membersihkan cache browser saya, saya membaca di tautan ini, bahwa, jika permintaan mendapat respons kosong, kami mendapatkan kesalahan peringatan ini. Saya mendapatkan beberapa CORS atas permintaan saya, sehingga respons dari permintaan ini menjadi kosong, Yang harus saya lakukan hanyalah menghapus cache browser, dan CORS tersebut berhasil lolos. Saya menerima CORS karena chrome telah menyimpan nomor PORT pada cache, Server hanya akan menerima
localhost:3010
dan saya melakukannyalocalhost:3002
, karena cache.sumber
Tanggapan balasan dengan header 'Access-Control-Allow-Origin: *' Periksa kode di bawah ini untuk tanggapan server Php.
sumber
Content-Type: application/json
di dalamnya. Kode OP pasti sudah melakukan ini.Anda harus menambahkan CORS di sisi server:
Jika Anda menggunakan nodeJS maka:
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
Tidak jelas dari pertanyaannya, tetapi dengan asumsi ini adalah sesuatu yang terjadi pada klien pengembangan atau pengujian, dan mengingat bahwa Anda sudah menggunakan Fiddler, Anda dapat meminta Fiddler merespons dengan memungkinkan respons:
AutoResponder
tabAdd Rule
dan edit aturan ke:Method:OPTIONS http://localhost
*CORSPreflightAllow
Unmatched requests passthrough
Enable Rules
Beberapa catatan:
sumber
Jika Anda bekerja di localhost, coba ini, ini satu-satunya ekstensi dan metode yang berfungsi untuk saya (Angular, hanya javascript, tanpa php)
https://chrome.google.com/webstore/detail/moesif-orign-cors-changer/digfbfaphojjndkpccljibejjbppifbc/related?hl=id
sumber
sudahkah Anda mencoba mengubah
dataType
permintaan ajax Anda darijsonp
menjadijson
? yang memperbaikinya dalam kasus saya.sumber
Di ekstensi Chrome, Anda dapat menggunakan
untuk menulis ulang header respons server. Anda dapat mengganti header yang sudah ada atau menambahkan header tambahan. Ini adalah tajuk yang Anda inginkan:
https://developers.chrome.com/extensions/webRequest#event-onHeadersReceived
Saya terjebak pada masalah CORB, dan ini memperbaikinya untuk saya.
sumber
Header respons biasanya disetel di server. Setel
'Access-Control-Allow-Headers'
ke'Content-Type'
di sisi serversumber
Cross-Origin Read Blocking (CORB), sebuah algoritme yang dengannya muatan sumber daya lintas-sumber yang meragukan dapat diidentifikasi dan diblokir oleh browser web sebelum mencapai halaman web..itu dirancang untuk mencegah browser mengirimkan respons jaringan lintas-asal tertentu ke halaman web.
Pertama Pastikan sumber daya ini disajikan dengan "
Content-Type
" yang benar , yaitu, untuk jenis MIME JSON - "text/json
", "application/json
", jenis MIME HTML - "text/html
".Kedua: set mode ke cors yaitu,
mode:cors
Pengambilannya akan terlihat seperti ini
referensi: https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md
https://www.chromium.org/Home/chromium-security/corb-for-developers
sumber
Ada kasus tepi yang perlu disebutkan dalam konteks ini: Chrome (setidaknya beberapa versi) memeriksa prapenerbangan CORS menggunakan algoritme yang disiapkan untuk CORB . IMO, ini agak konyol karena preflight tampaknya tidak memengaruhi model ancaman CORB, dan CORB tampaknya dirancang agar ortogonal dengan CORS. Selain itu, badan preflight CORS tidak dapat diakses, jadi tidak ada konsekuensi negatif yang hanya berupa peringatan yang mengganggu.
Bagaimanapun, periksa apakah tanggapan preflight CORS Anda (tanggapan metode OPTIONS) tidak memiliki isi (204) . 200 kosong dengan aplikasi tipe konten / aliran oktet dan panjang nol juga bekerja dengan baik di sini.
Anda dapat mengonfirmasi apakah ini kasus Anda dengan menghitung peringatan CORB vs. respons OPTIONS dengan badan pesan.
sumber
Tampaknya peringatan ini terjadi saat mengirimkan respons kosong dengan 200.
Konfigurasi ini di
.htaccess
tampilan saya peringatan di Chrome:Tapi mengubah baris terakhir menjadi
selesaikan masalahnya!
sumber
Saya memiliki masalah yang sama dengan ekstensi Chrome saya. Ketika saya mencoba menambahkan opsi "content_scripts" manifes saya bagian ini:
Dan saya menghapus bagian lain dari "izin" manifes saya:
Hanya ketika saya menghapusnya, CORB di salah satu permintaan XHR saya tidak setuju.
Terburuk dari semua yang ada beberapa XHR reqest dalam kode saya dan hanya satu dari mereka mulai mendapatkan kesalahan CORB (mengapa CORB tidak muncul di XHR lain Saya tidak tahu; mengapa perubahan nyata menyebabkan kesalahan ini, saya tidak tahu). Itulah mengapa saya memeriksa seluruh kode berulang kali dalam beberapa jam dan kehilangan banyak waktu.
sumber
Jika Anda melakukannya dalam safari, tidak perlu waktu, Cukup aktifkan menu pengembang dari Preferensi >> Privasi, dan hapus pilihan "Nonaktifkan Pembatasan Lintas-Asal" dari menu kembangkan. Jika Anda ingin hanya lokal, maka Anda hanya perlu mengaktifkan menu pengembang, dan pilih "Nonaktifkan pembatasan file lokal" dari menu kembangkan.
dan di Chrome untuk OSX buka Terminal dan jalankan:
Untuk Linux, jalankan:
Juga jika Anda mencoba mengakses file lokal untuk tujuan dev seperti AJAX atau JSON, Anda juga dapat menggunakan flag ini.
Untuk Windows masuk ke command prompt dan masuk ke folder tempat Chrome.exe dan ketik
Itu harus menonaktifkan kebijakan asal yang sama dan memungkinkan Anda untuk mengakses file lokal.
sumber
Saya mengalami masalah ini karena format respons jsonp dari server salah. Tanggapan yang salah adalah sebagai berikut.
Masalahnya adalah, objek di dalamnya
callback
harus berupa objek json yang benar, bukan array json. Jadi saya memodifikasi beberapa kode server dan mengubah formatnya:Browser dengan senang hati menerima respon setelah modifikasi.
sumber
callback(["apple", "peach"])
adalah JSONP yang benar-benar valid, dan berfungsi dengan baik saat saya mengujinya di berbagai sumber.Coba instal ekstensi "Moesif CORS" jika Anda menghadapi masalah di google chrome. Karena ini adalah permintaan lintas sumber, maka chrome tidak menerima tanggapan meskipun kode status tanggapannya adalah 200
sumber