Что такое ожидаемое поведение заголовков перенаправления и авторизации fetch?(Safari отличается от других браузеров Mac) - PullRequest
0 голосов
/ 26 ноября 2018

Короче говоря, при использовании заголовка авторизации с API выборки и последующим перенаправлением Chrome, FireFox и Opera (на Mac) включают заголовок авторизации во второй запрос.Однако Safari (12.0.1) этого не делает.Начиная с спецификации API загрузки и , выпуск # 553 я понимаю, что заголовок должен быть включен.Является ли это правильным пониманием того, как fetch должен работать?

Вот упрощенный код, который я использую с обходным путем для Safari, но я хотел бы знать, если я что-то делаю неправильно, что вызываетповедение с Safari или если есть лучший обходной путь.

export async function loadData(token) {
  const opts = {headers: {Authorization: `Bearer ${token}`}, credentials: 'include', redirect: 'follow'};
  let response = await fetch('/api/data', opts);

  // Work around for Safari not including headers in redirected request
  if (response.status === 401 && response.redirected) {
    response = await fetch(response.url, opts);
  }

  if (response.ok) {
    return response.json();
  }

  return null;
}

Быстрое редактирование дополнительной информации о перенаправлении.Перенаправленное местоположение имеет то же происхождение и является 302:

content-length: 118
content-type: text/plain; charset=utf-8
date: Mon, 26 Nov 2018 20:12:18 GMT
location: /api/data/current-version
server: nginx
status: 302
strict-transport-security: max-age=15768000
vary: Accept
...