2014-10-07 15 views
14

Bir DNN Service Framework WebAPI oluşturmaya çalışıyorum ancak CORS ile kullanmakta sorun yaşıyorum. Tüm uygun başlıklara sahibim (sanırım) ama hala çalışmıyor gibi görünüyor.Ajax İstek başlık alanı Anahtar, Access-Control-Allow-Üstbilgileriyle kullanılamaz

Hata:

talep Başlıkları:

Remote Address: 127.0.0.1:80 
URL: http://www.dnndev.me/mysite/builder/API/echo?message=Hello 
Request Method: OPTIONS 
Status Code: 200 OK 
Accept: */* 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Access-Control-Request-Headers: accept, key 
Access-Control-Request-Method: GET 
Connection: keep-alive 
Host: www.dnndev.me 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36 

Yanıt Başlıkları:

Access-Control-All-Headers: Origin, X-Requested-With, Content-Type, Accept, Key 
Access-Control-Allow-Methods: * 
Access-Control-Allow-Origin: * 
Cache-Control: no-cache 
Content-Length: 13 
Content-Type: application/json; charset=utf-8 
Date: Tue, 07 Oct 2014 18:49:10 GMT 
Expires: -1 
Pragma: no-cache 
Server: Microsoft-IIS/7.5 

Genellikle bu hata erişimi-' in ilgili başlığı olmamasından kaynaklanabilir olurdu Kontrol-All-Başlıkları. Ancak, ajax'ın isteğiyle devam etmesine izin vermek için doğru yanıtı gönderiyorum. Sadece reddediyor.

İşte yönteme benim ajax çağrısıdır:

$.ajax({ 
    type: 'GET', 
    url: 'http://www.dnndev.me/mysite/builder/API/echo', 
    dataType: 'json', 
    data: { message: 'Hello' }, 
    crossDomain: true, 
    headers: { 'Key': 'Bearer 7680ff6e-1362-4236-a9cd-c6bc8b6f13ea' }, 
    success: function (result) { console.log(result); } 
}); 

Muhtemelen bariz, ama bu sadece alanları arası istekleri ve ben özel başlığı içermesi yalnızca (bu nedenle SEÇENEKLER'e yapmak ajax procing) olur.

cevap

21

Sunucunuz uçuş öncesi isteğine aşağıdaki Özel başlıklı yanıt:

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key 
: Eğer (veya bu sunucuyu yazan kişi) CORS hakkında dikkatlice okursanız

Access-Control-All-Headers: Origin, X-Requested-With, Content-Type, Accept, Key 

o cevap verdi gerekirdi oysa

Artık istemci istemci devam edebilir ve Key özel üstbilgisini kullanabilir.

Bu, Bearer'un, Authorization başlığına gönderilen OAuth 2'ye özgü olduğunu söyler. Key'u kullanmak, RFC'lerin ve malzemelerin korkunç bir şekilde ihlali gibi görünüyor ve bir tekerlek yenilemesi gibi görünüyor.

+0

Teşekkür ederiz! Bunu hiç fark etmemiş olurdum. Küçük şeyler ... – NorianNyx

+0

Bearer'ı kullanmak OAuth 2'yi kullandığım eski bir fikir. Sadece henüz başlığı değiştirmedim. – NorianNyx

2

Lütfen Nyx'in sorusundaki yazım hatası ve Darin'in yanıtı ('ow' eksik) unutmayın. Bu yüzden

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key 

ve o hata mesajı giderir 'İstek başlık alanı bazı-header-alan Access-Control-Allow-Başlıkları uçuş öncesi modunda tarafından izin verilmiyor tarayıcı en cevap olarak gönderilen, SEÇENEK isteği.

1

sunucu yanıt başlıkları ekleyiniz:

başlık ('Erişim Kontrol-ver Başlıkları: Origin, içerik türü, X-Auth-Token, Yetki');

İlgili konular