2014-06-26 5 views
11

Korzystanie z pliku node.js i pakietu Request z przeglądarki (przez browserify) używam CORS do wykonania żądania HTTP GET w oddzielnej domenie.Jak wyłączyć opcję "withcredentials" w nagłówku HTTP za pomocą node.js i pakietu żądania?

Na serwerze, kiedy ustawić 'Access-Control-Allow-Origin' do zamiennika '*', pojawia się następujący błąd na kliencie:

XMLHttpRequest nie może załadować .... A wieloznacznego „*” nie może być stosowany w Nagłówek "Access-Control-Allow-Origin", gdy znacznik poświadczeń ma wartość true. Pochodzenie "..." jest zatem niedozwolone.

Żądanie nagłówka HTTP wygląda następująco:

Accept:*/* 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8,ja;q=0.6 
Access-Control-Request-Headers:withcredentials 
Access-Control-Request-Method:GET 
Cache-Control:no-cache 
Connection:keep-alive 
Host:localhost:3000 
Origin:http://localhost:9966 
Pragma:no-cache 
Referer:http://localhost:9966/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 

więc wyraźnie, że problem jest Access-Control-Request-Headers:withcredentials w nagłówku, prawda?

Aby móc to usunąć, muszę ustawić właściwość'concordentials 'obiektu' XMLHttpRequest 'na' false '. Jednak nie mogę dowiedzieć się, gdzie plik node.js lub Request tworzy obiekt "XMLHttpRequest" i jak mogę uzyskać do niego dostęp.

Dzięki.

+1

To nie jest w docs, ale patrząc na drodze 'request' używa' http browserify', myślę, że powinieneś być w stanie zrobić 'req. withCredentials = false; 'przed wywołaniem' .write' lub '.end'. – loganfsmyth

+0

@ loganfsmyth Dzięki za pomoc! Doprowadziło mnie to we właściwym kierunku. Odpowiedź zamieszczona poniżej. – smg

Odpowiedz

14

Po jakimś dochodzeniu, odkryłem, że ustawienie withCredentials mogą być przekazywane za pośrednictwem obiektu w parametrze opcje:

var req = http.request({ 
    withCredentials: false 
}, function(res) { 
    //... 
}); 

req.end(); 

Jeśli undefined, domyślnym ustawieniem jest true.

referencyjny od źródła http-browserify/lib/request.js:

if (typeof params.withCredentials === 'undefined') { 
    params.withCredentials = true; 
} 

try { xhr.withCredentials = params.withCredentials } 
catch (e) {} 
Powiązane problemy