Я делаю XMLHttpRequest для API, который должен устанавливать cookie после проверки параметров.Все работает правильно, и возвращается заголовок Set-Cookie, но браузер не устанавливает cookie.Пробовал в Firefox 62.0.3 и Chrome 68.0.3440.84.Мой флаг withCredentials имеет значение true.
Мой XMLHttpRequest выглядит следующим образом -
var invocation = new XMLHttpRequest();
var url = 'http://127.0.0.1/auth';
var invocationHistoryText;
var body = '{"email":"xxxx@gmail.com","password":"xxx@test"}';
function callOtherDomain(){
if(invocation)
{
invocation.open('POST', url, true);
invocation.withCredentials = "true";
invocation.setRequestHeader('Content-Type','application/json');
invocation.onreadystatechange = handler;
invocation.send(body);
}
else
{
invocationHistoryText = "No Invocation TookPlace At All";
var textNode = document.createTextNode(invocationHistoryText);
var textDiv = document.getElementById("textDiv");
textDiv.appendChild(textNode);
}
}
Мой предпечатный запрос также работает нормально.Ниже приведены его заголовки:
Preflight Request-
OPTIONS /auth HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Origin: http://xxx.000webhostapp.com
DNT: 1
Connection: close
Preffight Response -
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: http://xxx.000webhostapp.com
Vary: Origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Origin,X-Requested-With,Content-Type,Accept
Content-Length: 0
Date: Mon, 22 Oct 2018 01:10:21 GMT
Connection: close
Post Request -
POST /auth HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://xxx.000webhostapp.com/yyy.html
Content-Type: application/json
Content-Length: 57
Origin: http://xxx.000webhostapp.com
DNT: 1
Connection: close
{"email":"xxx@gmail.com","password":"xxx@test"}
Post Response -
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: http://xxx.000webhostapp.com
Vary: Origin
Access-Control-Allow-Credentials: true
Set-Cookie: coo=aa; Expires=Wed, 23 Oct 2018 07:28:00 GMT; HttpOnly
Content-Type: application/json; charset=utf-8
Content-Length: 368
ETag: W/"170-w78Ss5DUummozAsRbo5JsjFDoGI"
Date: Mon, 22 Oct 2018 01:10:22 GMT
Connection: close
{"data":{"firstName":"aaaa","lastName":"bbbb"},"Token":"ttt"}
Но этот возвращенный файл cookie не устанавливается браузером.
Я воспользовался более ранними предложениями - Файлы cookie на локальном хосте с явным доменом , Как исправить установку файлов cookie для субдомена в JSP? , Установить-Заголовок cookie не имеет никакого эффекта: об использовании файлов cookie и CORS, в том числе для localhost («Access-Control-Allow-Headers») .Исходя из этого, я удалил номер порта из моего запроса (на котором размещен мой сервер на 80), а также попытался перевести мой сервер на онлайновый HTTPS-сайт, но ничего не получилось.
Любая помощь будет принята с благодарностью.