У меня странная проблема, которая, как я надеюсь, имеет чрезвычайно простое решение. Я пытаюсь отправить запрос POST на сервер. Я пробовал это с помощью fetch и без использования XMLHttpRequest. Мой запрос XHR выглядит следующим образом:XHR POST Не удается отправить учетные данные и заголовок
var xhr = new XMLHttpRequest();
xhr.open("POST", location);
xhr.withCredentials = true;
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(obj));
Моя выборка запрос выглядит следующим образом:
fetch(location, {
credentials: 'include',
method: 'post',
body: JSON.stringify({obj}),
headers: {
'Content-Type': 'application/json'
})
.then((response) => {
if (response.ok){
response = response.json();
} else {
response = {};
}
window.console.debug(response);
})
.then((json) =>{
window.console.debug(json);
})
.catch((error) => {
window.console.debug(error);
});
Оба они имеют один и тот же результат. Если бы я оставил его, как и выше, полномочия не отправляют, так он посылает OPTIONS просить, и я получаю 401. My Chrome Network вкладка Заголовки запросов для сообщения выглядит следующим образом:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:192.168.146.101:8005
Origin:http://localhost:8555
Referer:http://localhost:8555/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
Если я удалить строки заголовка, тип содержимого неправильного типа (очевидно), и поэтому я получаю вкладку сети Запрос заголовки сообщений 415. хрома выглядит следующим образом:
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Authorization:Basic YWRtaW46YWRtaW4=
Connection:keep-alive
Content-Length:504
Content-Type:text/plain;charset=UTF-8
Host:192.168.146.101:8005
Origin:http://localhost:8555
Referer:http://localhost:8555/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
По какой-то причине, когда я добавить заголовок, это списывает учетные данные. Я пытался посылать закодированный пользователя: передать в заголовке, так как это (но, очевидно, с реальным именем пользователя/пароль):
var xhr = new XMLHttpRequest();
xhr.open("POST", location);
xhr.withCredentials = true;
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Authorization', 'Basic ' + window.btoa('user:pass');
xhr.send(JSON.stringify(obj));
Это происходит во всех браузерах. Спасибо за любую помощь!
Я предполагаю, что мой вопрос действительно такой: как изменить тип содержимого, не отображая его под заголовками Access-Control-Request-Headers, а вместо этого просто появляется, где отображается Content-Type по умолчанию? Плагин Postman способен каким-то образом заставить его отображаться таким образом, и это, похоже, единственное решение этой проблемы. – Bruce