Я хочу настроить свой 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}"
Я не уверен, какие последствия это может иметь для безопасности, поэтому используйте его, как обычно.