Назад | Перейти на главную страницу

Разрешение всех заголовков в CORS

Я хочу настроить свой Apache 2.4 для обслуживания некоторых статических ресурсов удобным для CORS способом. У меня уже есть такая настройка:

Header always set Access-Control-Allow-Origin "*"

Однако для недавнего Safari этого оказалось недостаточно:

[Ошибка] Не удалось загрузить ресурс: поле заголовка запроса… не разрешено Access-Control-Allow-Headers.

Поля, упомянутые таким образом, включают Accept-Encoding и DNT, но я думаю, что после их добавления я также могу увидеть Cache-Control, Origin и Accept-Language, так как именно они упомянуты в Access-Control-Request-Headers заголовок, отправленный Safari. Но кто должен сказать мне, какие другие заголовки Safari или какой-либо другой браузер может запрашивать сейчас или в будущем для меня или для какого-либо другого пользователя с другой конфигурацией? По-видимому * не является допустимой настройкой для Access-Control-Allow-Headers заголовок, по причинам, которые я не очень понимаю.

Итак, как мне настроить сервер так, чтобы он просто говорил: «Используйте эти ресурсы где угодно, мне плевать на CORS»?

* теперь допустимое значение для Access-Control-Allow-Headers по крайней мере, для запрошенных без авторизации; но поскольку это относительно недавнее дополнение к спецификации, вероятно, он еще не дошел до браузеров.

Я нашел одно решение: вместо того, чтобы явно добавлять заголовки, вы можете просто выводить все запрошенные заголовки обратно в браузер. Такой подход был предложен здесь, в Stack Overflow, но в этом посте не было статической конфигурации для этого.

После прочтения документации по Header и выражения Мне удалось добиться этого, используя следующую строку:

Header always set Access-Control-Allow-Headers "expr=%{req:Access-Control-Request-Headers}"

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