API выборки Firefox: Как опустить заголовок "origin" в запросе?

Если вы сделаете запрос на выборку в Firefox WebExtension, он автоматически установит заголовок "origin". Например, когда я запускаю этот код внутри WebExtensions...

fetch('http://example.com/')

... результирующий запрос содержит заголовок: "origin: moz-extension://539a0d5b-60d9-4726-b3de-27d6979edc26"

Запуск того же кода в Chromium не установит заголовок. (Обновление: это не всегда так, поскольку Chrome может также добавить заголовок: "origin: chrome-extension://...".)

Есть ли возможность отправить запрос без "происхождения"?


Я не нашел вариант в API выборки. Итак, пока единственное решение, которое я вижу, это удалить заголовок с помощью API webRequest, но это кажется слишком сложным.

1 ответ

Решение

Firefox и Chrome автоматически заполняют origin заголовок, когда WebExtension отправляет запросы с использованием API выборки. В настоящее время нет никакой опции API, чтобы предотвратить это.

Если вы не хотите такого поведения, у вас есть два варианта:

  1. Используйте старый API XMLHttpRequest вместо получения
  2. Вручную раздеть origin заголовок с использованием API webRequest

Вариант 1 будет работать, так как origin заголовок устанавливается только API выборки. Для варианта 2 вам нужно будет установить onBeforeSendHeaders Обработчик для удаления заголовка до того, как запрос покинет браузер:

function originWithId(header) {
  return header.name.toLowerCase() === 'origin' &&
         (header.value.indexOf('moz-extension://') === 0 ||
          header.value.indexOf('chrome-extension://') === 0);
}

chrome.webRequest.onBeforeSendHeaders.addListener(
  (details) => {
    return {
      requestHeaders: details.requestHeaders.filter(x => !originWithId(x))
    }
  },
  {urls: ["<all_urls>"]},
  ["blocking", "requestHeaders"]
);

Чтобы использовать API, вам нужно будет добавить "webRequest" а также "webRequestBlocking" к разрешениям в manifest.json,

Другие вопросы по тегам