Как отключить ‘withcredentials’ в заголовке HTTP с node.js и запросить пакет услуг?

#javascript #node.js #http #xmlhttprequest #request

#javascript #node.js #http #xmlhttprequest #запрос

Вопрос:

Использование node.js и пакет запроса из браузера (через browserify), я использую CORS для выполнения HTTP-запроса GET в отдельном домене.

На сервере, когда я устанавливаю 'Access-Control-Allow-Origin' подстановочный '*' знак, я получаю следующую ошибку на клиенте:

XMLHttpRequest не может загрузиться …. Подстановочный знак «*» не может быть использован в заголовке «Access-Control-Allow-Origin», если флаг учетных данных имеет значение true. Поэтому доступ к источнику «…» запрещен.

Заголовок HTTP-запроса выглядит следующим образом:

 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
 

Итак, очевидно, что проблема кроется Access-Control-Request-Headers:withcredentials в заголовке, не так ли?

Чтобы иметь возможность удалить это, мне нужно установить для свойства ‘withcredentials’ объекта ‘XMLHttpRequest’ значение ‘false’. Однако я не могу понять, где node.js или пакет запроса создает объект ‘XMLHttpRequest’, и как я могу получить к нему доступ.

Спасибо.

Комментарии:

1. Этого нет в документах, но, глядя на способ request использования http-browserify , я думаю, вы должны быть в состоянии сделать req.withCredentials = false; это перед вызовом .write или .end .

2. @loganfsmyth Спасибо за вашу помощь! Это привело меня в правильном направлении. Ответ размещен ниже.

Ответ №1:

После некоторого расследования я обнаружил, что withCredentials параметр может быть передан через объект параметров options:

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

req.end();
 

Если undefined значение по умолчанию равно true .

Ссылка из http-browserify/lib/request.js источника:

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

try { xhr.withCredentials = params.withCredentials }
catch (e) {}