#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) {}