Saya telah membuat demo menggunakan API pencarian foto Flickr untuk JavaScript. Sekarang saya mengubahnya menjadi AngularJs. Saya telah mencari di internet dan menemukan konfigurasi di bawah ini.
Konfigurasi:
myApp.config(function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
});
Layanan:
myApp.service('dataService', function($http) {
delete $http.defaults.headers.common['X-Requested-With'];
this.flickrPhotoSearch = function() {
return $http({
method: 'GET',
url: 'http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=3f807259749363aaa29c76012fa93945&tags=india&format=json&callback=?',
dataType: 'jsonp',
headers: {'Authorization': 'Token token=xxxxYYYYZzzz'}
});
}
});
Pengendali:
myApp.controller('flickrController', function($scope, dataService) {
$scope.data = null;
dataService.flickrPhotoSearch().then(function(dataResponse) {
$scope.data = dataResponse;
console.log($scope.data);
});
});
Tapi tetap saja saya mendapat kesalahan yang sama. Berikut ini beberapa tautan yang saya coba:
XMLHttpRequest tidak dapat memuat URL. Asal tidak diizinkan oleh Access-Control-Allow-Origin
javascript
angularjs
xmlhttprequest
cors
ankitr
sumber
sumber
Jawaban:
Kamu tidak. Server yang Anda minta harus menerapkan CORS untuk memberikan JavaScript dari akses situs web Anda. JavaScript Anda tidak dapat memberikan izin kepada dirinya sendiri untuk mengakses situs web lain.
sumber
https://www.google.com
menggunakan aplikasi seperti Postman, tetapi ketika saya mencoba untukGET
darihttps://www.google.com
menggunakan panggilan AJAX saya mendapatkan error CORS? Apakah saya tidak bisa membuat panggilan AJAX berperilaku serupa dengan panggilan dari POSTMAN?Saya punya masalah yang sama dan bagi saya itu bermuara pada menambahkan header HTTP berikut pada respon dari penerima :
Anda mungkin memilih untuk tidak menggunakan
*
di bagian akhir, tetapi hanya nama domain dari host yang mengirim data. Suka*.example.com
Tetapi ini hanya layak bila Anda memiliki akses ke konfigurasi server.
sumber
header('Access-Control-Allow-Origin: *');
Http.get()
atau sejenisnya, tambahkanheader('Access-Control-Allow-Origin: *')
sebagai output pertama dalam skrip PHP yang disebut (yaitu sebelum Anda menampilkan respons aktual, JSON, apa pun.Coba gunakan layanan sumber daya untuk mengkonsumsi flickr jsonp:
Templat:
sumber
Masalah ini terjadi karena kebijakan model keamanan aplikasi web yaitu Kebijakan Asal yang Sama Di bawah kebijakan tersebut, peramban web mengizinkan skrip yang terkandung dalam halaman web pertama untuk mengakses data di halaman web kedua, tetapi hanya jika kedua halaman web memiliki asal yang sama. Itu berarti pemohon harus cocok dengan host, protokol, dan port situs permintaan yang tepat.
Kami memiliki beberapa opsi untuk mengatasi masalah header CORS ini.
Menggunakan Proxy - Dalam solusi ini kami akan menjalankan proxy sehingga ketika permintaan melewati proxy itu akan tampak seperti itu adalah asal yang sama. Jika Anda menggunakan nodeJS Anda dapat menggunakan cors-mana saja untuk melakukan hal-hal proxy. https://www.npmjs.com/package/cors-anywhere .
Contoh : -
JSONP - JSONP adalah metode untuk mengirim data JSON tanpa khawatir tentang masalah lintas domain. Ini tidak menggunakan objek XMLHttpRequest. Ia menggunakan
<script>
tag sebagai gantinya. https://www.w3schools.com/js/js_json_jsonp.aspSisi Server - Di sisi server kami harus mengaktifkan permintaan lintas-asal. Pertama kita akan mendapatkan permintaan Preflighted (OPTIONS) dan kita harus mengizinkan permintaan itu adalah kode status 200 (ok).
Permintaan preflighted terlebih dahulu mengirim header permintaan HTTP OPTIONS ke sumber daya di domain lain, untuk menentukan apakah permintaan sebenarnya aman untuk dikirim. Permintaan lintas-situs lebih dulu seperti ini karena mungkin memiliki implikasi pada data pengguna. Secara khusus, permintaan sudah dicetak sebelumnya jika menggunakan metode selain GET atau POST. Juga, jika POST digunakan untuk mengirim data permintaan dengan Tipe-Konten selain dari aplikasi / x-www-form-urlencoded, multipart / form-data, atau teks / polos, mis. Jika permintaan POST mengirimkan payload XML ke server menggunakan aplikasi / xml atau teks / xml, maka permintaannya sudah disorot. Itu mengatur header kustom dalam permintaan (mis. Permintaan menggunakan header seperti X-PINGOTHER)
Jika Anda menggunakan pegas hanya menambahkan kode di bawah ini akan menyelesaikan masalah. Di sini saya telah menonaktifkan token csrf yang tidak masalah aktifkan / nonaktifkan sesuai kebutuhan Anda.
Jika Anda menggunakan keamanan pegas, gunakan kode di bawah ini bersama dengan kode di atas.
sumber
Saya mengalami masalah serupa seperti ini, masalah dengan backend. Saya menggunakan server simpul (Express). Saya mendapat permintaan dari frontend (sudut) seperti yang ditunjukkan di bawah ini
Tapi itu memberi kesalahan berikut
Ini adalah kode backend yang ditulis menggunakan express tanpa header
Setelah menambahkan header ke masalah metode diselesaikan
Anda bisa mendapatkan detail lebih lanjut tentang Mengaktifkan CORS di Node JS
sumber
Dijawab sendiri.
CORS angular js + restEasy pada POST
Yah akhirnya saya datang ke solusi ini: Alasannya bekerja dengan IE adalah karena IE mengirim langsung POST, bukan pertama permintaan preflight untuk meminta izin. Tapi saya masih tidak tahu mengapa filter tidak dapat mengelola permintaan OPSI dan mengirimkan dengan header default yang tidak dijelaskan dalam filter (sepertinya menimpa untuk satu-satunya kasus ... mungkin hal yang mudah saja .. .)
Jadi saya membuat jalur PILIHAN di layanan istirahat saya yang menulis ulang respons dan menyertakan header dalam respons menggunakan tajuk respons
Saya masih mencari cara bersih untuk melakukannya jika ada yang menghadapi ini sebelumnya.
sumber
Apache / HTTPD cenderung ada di sebagian besar perusahaan atau jika Anda menggunakan Centos / etc di rumah. Jadi, jika Anda memilikinya, Anda dapat melakukan proxy dengan sangat mudah untuk menambahkan header CORS yang diperlukan.
Saya punya posting blog di sini karena saya menderita dengan itu beberapa kali baru-baru ini. Tetapi yang penting adalah menambahkan ini ke file /etc/httpd/conf/httpd.conf Anda dan pastikan Anda sudah melakukan "Dengarkan 80":
Ini memastikan bahwa semua permintaan ke URL di bawah server-ip-Anda: 80 / rute SomePath ke http: // target-ip: 8080 / SomePath (API tanpa dukungan CORS) dan mereka kembali dengan Access-Control-Allow yang benar Header asal untuk memungkinkan mereka bekerja dengan aplikasi web Anda.
Tentu saja Anda dapat mengubah port dan menargetkan seluruh server daripada SomePath jika Anda suka.
sumber
Jawaban ini menguraikan dua cara untuk mengatasi API yang tidak mendukung CORS:
Salah satu solusinya adalah menggunakan CORS PROXY:
Untuk informasi lebih lanjut, lihat
Gunakan JSONP jika API mendukungnya:
The DEMO pada PLNKR
Untuk informasi lebih lanjut, lihat
sumber
sumber
kita dapat mengaktifkan CORS di frontend dengan menggunakan modul ngResourse. Tapi yang paling penting, kita harus memiliki kode ini sambil membuat permintaan ajax di controller,
Juga, Anda harus menambahkan ngResourse CDN di bagian skrip dan menambahkan dependensi dalam modul aplikasi.
Kemudian gunakan "ngResourse" di bagian ketergantungan modul aplikasi
var routerApp = angular.module("routerApp", ["ui.router", 'ngResource']);
sumber