В виртуальном хосте apache у меня есть следующие команды:
ProxyPass "/s" "http://127.0.0.1:3001"
ProxyPassReverse "/s" "http://127.0.0.1:3001"
RewriteRule ^/s/(.*) http://127.0.0.1:3001/$1 [P,L]
ProxyPassReverseCookiePath "/" "/"
Внутренним сервером является NodeJS. Сам прокси работает нормально. Проблема в том, что Узел отправляет set-cookie в заголовок HTTP (идентификатор сеанса), но браузер, похоже, игнорирует его. Я тестировал с Chromium и Firefox, но никто не создает cookie. Я попытался изменить конфигурацию виртуального хоста, но ничего не решает проблему. Команда set-cookie:
set-cookie: sid=s%3AhgHWDO3D...BBUZbbOA; Path=/; HttpOnly; Secure;HttpOnly;Secure
Мне нужна ваша помощь, чтобы решить эту проблему. Спасибо.
UPDATE
Если URL содержит прямой запрос для узла:
https://example.com/s/backend
это работает. Создает сессию cookie. Но если этот URL вызывается из запроса AJAX в JS, он не создает cookie.
https://example.com
загружает HTML с помощью скрипта загрузки файла JS. Этот файл JS выполняет AJAX-вызов к бэкэнду, используя путь https://example.com/s/something, и в этом случае файл cookie никогда не создается.
Есть предложения?
UPDATE
Я обнаружил, что проблема в том, когда я использую Fetch API для получения файла JSON. Этот запущенный код не создает cookie идентификатора сеанса:
fetch("https://localbestbatteriesonline.com/s/p.json?0103")
.then(function(response) {
return response.json();
})
.then(function(myJson) {
console.log(myJson);
});
Но если у меня есть этот код, он создает cookie:
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
};
xhttp.open("GET", "https://localbestbatteriesonline.com/s/p.json?0103", true);
xhttp.send();
Анализируя запросы, оба абсолютно одинаковы. Оба получают куки для создания.
Есть идеи, почему с fetch не работает?