Файлы cookie Apache2.49 не работают через мой ProxyPass VirtualHost - PullRequest
0 голосов
/ 02 июля 2018

В виртуальном хосте 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 не работает?

1 Ответ

0 голосов
/ 02 июля 2018

Проблема решена. Использование Fetch API не включает обмен куки-файлами, как это происходит в XMLHttpRequest. Поэтому он не создает cookie идентификатора сеанса. Чтобы включить это, вызов Fetch должен иметь опцию: Полномочия: "тот же источник"

.
fetch("https://localbestbatteriesonline.com/s/p.json?0103",{credentials:"same-origin"})
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(myJson);
  });

Теперь это работает.

...