2015-01-25 12 views
9

AngularJS kullanarak yerel olarak çalışan bir REST API çağrısı çalışıyorum. İşte angularjs kodudur:AngularJS: Güvenli olmayan başlık ayarlamak için reddetti "Erişim-Denetim-İstek Başlıkları"

$http.defaults.headers.common = {"Access-Control-Request-Headers": "accept, origin, authorization"}; 

$http.defaults.headers.common['Authorization'] = 'Basic amF5M2RlYzpqYXk='; 
$http({method: 'GET', url: 'http://127.0.0.1:5000/user/jay3dec'}). 
     success(function(data, status, headers, config) { 

     }). 
     error(function(data, status, headers, config) { 
      alert(data); 

     }); 

Ama tarayıcı konsoluna hataları alıyorum:

Refused to set unsafe header "Access-Control-Request-Headers" 

ben REST API CURL kullanarak http://127.0.0.1:5000/user/jay3dec çalışan çağrı sorgulamak için çalıştı.

curl -H "Origin: http://127.0.0.1:8000" -H "Authorization: Basic amF5M2RlYzpqYXk=" http://127.0.0.1:5000/user/jay3dec --verbose 

Ve

aşağıdaki çıktıyı verdi:

> GET /user/jay3dec HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: 127.0.0.1:5000 
> Accept: */* 
> Origin: http://127.0.0.1:8000 
> Authorization: Basic amF5M2RlYzpqYXk= 
> 
* HTTP 1.0, assume close after body 
< HTTP/1.0 200 OK 
< Content-Type: application/json 
< Content-Length: 454 
< ETag: bff7b7db33baedb612276861e84faa8f7988efb1 
< Last-Modified: Tue, 30 Dec 2014 14:32:31 GMT 
< Access-Control-Allow-Origin: * 
< Access-Control-Allow-Headers: Authorization 
< Access-Control-Allow-Methods: HEAD, OPTIONS, GET 
< Access-Control-Allow-Max-Age: 21600 
< Server: Eve/0.4 Werkzeug/0.9.6 Python/2.7.6 
< Date: Sun, 25 Jan 2015 20:00:29 GMT 
< 
* Closing connection 0 
{"username": "jay3dec", "_updated": "Tue, 30 Dec 2014 14:32:31 GMT", "password": "jay", "firstname": "jay", "lastname": "raj", "phone": "9895590754", "_links": {"self": {"href": "/user/54a2b77f691d721ee170579d", "title": "User"}, "parent": {"href": "", "title": "home"}, "collection": {"href": "/user", "title": "user"}}, "_created": "Tue, 30 Dec 2014 14:32:31 GMT", "_id": "54a2b77f691d721ee170579d", "_etag": "bff7b7db33baedb612276861e84faa8f7988efb1"} 

herhangi bir nokta nedir sorun olabilir miyim ??

$http.defaults.headers.common arkasında kod başlığı aşağıdaki başlıkların biri için bir harf duyarsız eşleşme ise XMLHttpRequest specification değinen

var xhr = createXhr(); 

xhr.open(method, url, true); 
    forEach(headers, function(value, key) { 
    if (isDefined(value)) { 
     xhr.setRequestHeader(key, value); 
    } 
    }); 

... 

function createXhr() { 
    return new window.XMLHttpRequest(); 
} 

, tarayıcı

Accept-Charset 
Accept-Encoding 
Access-Control-Request-Headers 
Access-Control-Request-Method 
Connection 
Content-Length 
... 

That sonlandırır

cevap

9

ise neden olamaz Access-Control-Request-Headers başlığını ayarlamak için $http.defaults.headers.common kullanın. Tarayıcı yerine sizin için istek başlıklarını ele alacaktır.

3

Sorun, CORS adresindedir. Sunucu tarafınızı, yetkilendirmeyi üstbilgiye izin verecek şekilde yapılandırmalısınız. Sana benziyor sunucu için ama benim asp.net web API 2 sunucusu için kullanılır bilmiyorum:
Web.config Güvenlik nedeniyle

<system.webServer> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="Content-Type,Authorization" /> 
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
    </customHeaders> 
    </httpProtocol> 
...... 
0

, tarayıcılar izin vermez kafa bazı belirledi güvenlik Yani, hat kafa ayrıştırmak için tarayıcı kullanmayın vb gibi çerez, ev sahibi, Yönlendireni, riske atar. Gönderilen sunucu tarafındaki sunucu tarafında kullanılabilir. Referans: Cross origin resource sharing

İlgili konular