Как перехватить вызовы HTTP OPTIONS, сделанные браузером - PullRequest
0 голосов
/ 16 января 2020

У меня есть сценарий использования, в котором я хотел бы перехватывать и регистрировать вызовы HTTP OPTIONS. Я понимаю, что они выполняются браузером как часть CORS

. Я пытался установить monkeypatching XMLHttpRequest, а также работника сервиса, который перехватывал бы через событие "fetch".

Однако я только могу перехватывать вызовы не OPTIONS (GET, PUT, POST)

Как перехватить вызовы OPTIONS? Я отчетливо вижу, как они выполняются на вкладке сети

1 Ответ

2 голосов
/ 16 января 2020

Предварительные запросы CORS жестко запрограммированы в браузерах как реализация безопасности браузера и не предоставляются нам через программируемые API. По своей природе перехват или изменение предварительных запросов может отрицательно сказаться на безопасности самого CORS.

Поскольку OPTIONS запросы доступны на Chrome вкладке сети Dev Tools, вы можете использовать Puppeteer , который использует протокол Chrome Dev Tools для доступа к сетевым запросам более низкого уровня. page.setRequestInterception() будет захватывать OPTIONS запросов.

main.m js

import puppeteer from 'puppeteer';

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  page.on('request', debugRequest);

  await page.setRequestInterception(true);

  await page.evaluate(() => {
    // custom request headers should force preflight CORS requests
    // (see https://www.w3.org/TR/cors/#resource-preflight-requests)
    fetch('https://example.com', {
      headers: {
        'force-preflight-request': null
      }
    });
  })

  await browser.close();
})()

function debugRequest(request) {
  console.log(request.method(), request.url())
}
...