de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 ixaxaar
ixaxaar
Question

CORS: Tidak dapat menggunakan wildcard di Access-Control-Allow-Origin ketika kredensial bendera adalah benar

Saya memiliki sebuah penataan yang melibatkan

Frontend server (Node.js domain: localhost:3000) <---> Backend (Django, Ajax, domain: localhost:8000)

Browser <-- webapp <-- Node.js (Melayani aplikasi)

Browser (webapp) --> Ajax --> Django(Melayani ajax POST permintaan)

Sekarang, masalah saya di sini adalah dengan CORS setup yang webapp digunakan untuk membuat panggilan Ajax ke backend server. Di chrome, saya terus mendapatkan

Tidak dapat menggunakan wildcard di Access-Control-Allow-Origin ketika kredensial bendera adalah benar.

doesn't bekerja pada firefox baik.

Saya Node.js setup:

var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'http://localhost:8000/');
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
};

Dan di Django I'm menggunakan ini middleware seiring dengan ini

Webapp membuat permintaan seperti:

$.ajax({
    type: "POST",
    url: 'http://localhost:8000/blah',
    data: {},
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true,
    dataType: 'json',
    success: successHandler
});

Jadi, header permintaan yang webapp mengirimkan terlihat seperti:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept"
Access-Control-Allow-Methods: 'GET,PUT,POST,DELETE'
Content-Type: application/json 
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: csrftoken=***; sessionid="***"

Dan berikut's respon header:

Access-Control-Allow-Headers: Content-Type,*
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Content-Type: application/json

Di mana aku pergi salah?!

Edit 1: I've telah menggunakan chrome --disable-web-keamanan, tapi sekarang ingin hal-hal yang benar-benar bekerja.

Edit 2: Jawaban:

Jadi, solusi untuk saya django-cors-header config:

CORS_ORIGIN_ALLOW_ALL = False
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
    'http://localhost:3000' # Here was the problem indeed and it has to be http://localhost:3000, not http://localhost:3000/
)
253 2013-11-02T15:18:28+00:00 7
 ixaxaar
ixaxaar
Pertanyaan edit 1 Oktober 2015 в 12:12
Pemrograman
django
ajax
node.js
cors
django-cors-headers
Solution / Answer
 user568109
user568109
2 November 2013 в 5:31
2013-11-02T17:31:56+00:00
Lebih
Sumber
Sunting
#22695880

Ini adalah bagian dari keamanan, anda tidak dapat melakukan itu. Jika anda ingin memungkinkan kredensial kemudian anda Access-Control-Allow-Origin tidak harus menggunakan *. Anda akan memiliki untuk menentukan tepat protokol + domain + port. Untuk referensi lihat pertanyaan-pertanyaan ini :

  1. https://stackoverflow.com/questions/14003332/access-control-allow-origin-wildcard-subdomains-ports-and-protocols
  2. https://stackoverflow.com/questions/8074665/cross-origin-resource-sharing-with-credentials

Selain * terlalu permisif dan akan mengalahkan gunakan kredensial. Jadi set http://localhost:3000 atau http://localhost:8000 karena memungkinkan asal header.

 Community
Community
Jawaban edit 23 Mei 2017 в 12:26
220
0
 Hamid
Hamid
26 Agustus 2017 в 12:30
2017-08-26T00:30:16+00:00
Lebih
Sumber
Sunting
#22695881

Jika anda menggunakan CORS middleware dan anda ingin mengirim withCredential boolean true, anda dapat mengkonfigurasi CORS seperti ini:

var cors = require('cors');    
app.use(cors({credentials: true, origin: 'http://localhost:3000'}));
 BSMP
BSMP
Jawaban edit 18 September 2017 в 2:43
24
0
 Bulkan
Bulkan
2 November 2013 в 3:22
2013-11-02T15:22:58+00:00
Lebih
Sumber
Sunting
#22695879

Jika anda menggunakan express anda dapat menggunakan cors paket untuk memungkinkan CORS suka jadi, bukannya menulis middleware;

var express = require('express')
, cors = require('cors')
, app = express();

app.use(cors());

app.get(function(req,res){ 
  res.send('hello');
});
14
0
Iron shield
Iron shield
24 Desember 2017 в 10:41
2017-12-24T10:41:00+00:00
Lebih
Sumber
Sunting
#22695882

coba ini:

const cors = require('cors')

const corsOptions = {
    origin: 'http://localhost:4200',
    credentials: true,

}
app.use(cors(corsOptions));
Thomas Smyth
Thomas Smyth
Jawaban edit 24 Desember 2017 в 11:38
9
0
 Squirrl
Squirrl
17 Mei 2019 в 3:22
2019-05-17T15:22:49+00:00
Lebih
Sumber
Sunting
#22695884

Jika anda ingin untuk memungkinkan semua asal-usul dan menjaga kredensial benar, ini bekerja untuk saya:

app.use(cors({
  origin: function(origin, callback){
    return callback(null, true);
  },
  optionsSuccessStatus: 200,
  credentials: true
}));
5
0
eriel marimon
eriel marimon
30 Desember 2018 в 9:58
2018-12-30T09:58:33+00:00
Lebih
Sumber
Sunting
#22695883

Untuk kepentingan pembangunan di Chrome, menginstal add on akan menyingkirkan kesalahan tertentu:

Access to XMLHttpRequest at 'http://192.168.1.42:8080/sockjs-node/info?t=1546163388687' 
from origin 'http://localhost:8080' has been blocked by CORS policy: The value of the 
'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' 
when the request's credentials mode is 'include'. The credentials mode of requests 
initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

Setelah menginstal, pastikan anda menambahkan url pola untuk Dicegat Url dengan mengklik pada AddOn's (CORS, hijau atau merah) ikon dan mengisi sesuai textbox. Contoh pola URL untuk menambahkan di sini bahwa akan bekerja dengan http://localhost:8080 akan sama: *://*

4
0
 Renaud
Renaud
26 Agustus 2019 в 9:57
2019-08-26T09:57:27+00:00
Lebih
Sumber
Sunting
#22695885

Ini bekerja untuk saya dalam pengembangan tapi aku bisa't menyarankan bahwa dalam produksi, it's hanya cara yang berbeda untuk mendapatkan pekerjaan yang dilakukan yang belum't telah disebutkan, namun mungkin bukan yang terbaik. Pokoknya here goes:

Anda bisa mendapatkan asal dari permintaan, maka gunakan yang di respon header. Berikut ini's bagaimana tampilannya di check: aplikasi.menggunakan(function(req, res, next) { res.header(&#39;Access-Control-Allow-Origin&#39;, req.header(&#39;asal&#39;) ); next(); }); Saya don't tahu apa yang akan terlihat seperti dengan python setup tapi itu harus mudah untuk menerjemahkan.

0
0
Related communities 2
Node.js Indonesia 🇮🇩
Node.js Indonesia 🇮🇩
10 785 pengguna
Indonesian NodeJs Developer Community Admin : - @khannedy - @endymuhardin Ninja JS: @julianalimin @kucingMumuBulatMeongMeongNyanCat
Buka telegram
Django Indonesia
Django Indonesia
4 680 pengguna
Web Framework For Perfectionists With Deadlines
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 15 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
DE
EL
ES
FR
ID
IT
JA
KO
LV
NL
PT
RU
TR
ZH
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi