В спецификации HTTP CORS, какая разница между Allow-Headers и Expose-Headers?

В спецификации HTTP CORS, какая разница между 5.6 Access-Control-Allow-Headers и 5.3 Access-Control-Expose-Headers?

Заголовок

[Allow-Headers] указывает, как часть ответа на preflight request, имена полей заголовка могут использоваться во время фактический запрос

UPDATE. Я надеялся, что кто-то скажет мне, что один из этих заголовков отправляется для каждого запроса (перед полетом)... Однако для этого используется еще один заголовок: 5.9 Access-Control-Request-Headers

Заголовок

[Request-Headers] указывает, какие заголовки будут использоваться в фактическом запросе как часть запроса предполета

Кстати, мне нравится, как они (W3C) тщательно сформулировали 5.9, чтобы заголовок запроса мог иметь поле с именем _Something_ Request Header.

Я полностью потерял в спецификации, есть ли диаграмма, где я могу лучше понять этот процесс?

Ответ 1

Access-Control-Allow-Headers

Используется в ответ на запрос предварительной проверки, чтобы указать, какие заголовки HTTP могут использоваться при выполнении фактического запроса.

Access-Control-Expose-Headers

Этот заголовок позволяет заголовкам "белый список" серверов разрешать доступ к браузерам. Например:

Источник: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Ответ 2

Просто, чтобы прояснить вышеприведенный комментарий, что они плохо названы, эти имена плохо названы.

Они выполняют различные функции.

  • Access-control-allow-headers указывает, каким заголовкам разрешено изменять состояние сервера.
  • В то время как в Access-control-expose-headers есть метод get getResponseHeader(), который возвращает значение конкретного заголовка ответа. Во время запроса CORS метод getResponseHeader() может получить доступ только к простым заголовкам ответов. Чтобы иметь доступ к другим заголовкам, вам необходимо указать здесь.