it-swarm-ru.tech

Как добавить заголовок Access-Control-Allow-Origin

Я разрабатываю веб-сайт (например, mywebsite.com), и этот сайт загружает шрифтовые шрифты с другого сайта (например, anothersite.com). У меня были проблемы с загрузкой шрифта шрифта в Firefox, и я читал этот блог :

Firefox (который поддерживает @ font-face из версии 3.5) не разрешает междоменные шрифты по умолчанию. Это означает, что шрифт должен обслуживаться из того же домена (и субдомена), если вы не можете добавить к шрифту заголовок "Access-Control-Allow-Origin".

Как я могу установить заголовок Access-Control-Allow-Origin для шрифта?

93
Ash

Итак, что вы делаете, это ... В папке с файлами шрифтов поместите файл htaccess со следующим.

<FilesMatch "\.(ttf|otf|eot|woff|woff2)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

также в вашем удаленном файле CSS для объявления font-face требуется полный абсолютный URL-адрес файла шрифта (не требуется в локальных файлах CSS):

например.

@font-face {
    font-family: 'LeagueGothicRegular';
    src: url('http://www.example.com/css/fonts/League_Gothic.eot?') format('eot'),
         url('http://www.example.com/css/fonts/League_Gothic.woff') format('woff'),
         url('http://www.example.com/css/fonts/League_Gothic.ttf') format('truetype'),
         url('http://www.example.com/css/fonts/League_Gothic.svg')

}

Это решит проблему. Стоит отметить, что вы можете точно указать, каким доменам должен быть разрешен доступ к вашему шрифту. В вышеупомянутом htaccess я указал, что каждый может получить доступ к моему шрифту с помощью "*", но вы можете ограничить его:

Один URL:

Набор заголовков Access-Control-Allow-Origin http://example.com

Или список URL через запятую

Access-Control-Allow-Origin: http://site1.com,http://site2.com

(Несколько значений не поддерживаются в текущих реализациях)

155
Ash

Согласно официальные документы , браузерам не нравится, когда вы используете

Access-Control-Allow-Origin: "*"

заголовок, если вы также используете

Access-Control-Allow-Credentials: "true"

заголовок. Вместо этого они хотят, чтобы вы разрешили их Происхождение специально. Если вы все еще хотите разрешить все источники, вы можете применить простую магию Apache, чтобы заставить его работать (убедитесь, что у вас включен mod_headers):

Header set Access-Control-Allow-Origin "%{HTTP_Origin}e" env=HTTP_Origin

Браузеры должны отправлять заголовок Origin во всех междоменных запросах. В документах конкретно указано, что вам нужно повторить этот заголовок обратно в заголовок Access-Control-Allow-Origin, если вы принимаете/планируете принять запрос. Это то, что делает эта директива Header.

21
laughingbovine

Принятый ответ не работает для меня, к сожалению, поскольку CSS-файлы моего сайта @import шрифтовые CSS-файлы, и все они хранятся в CDN Rackspace Cloud Files.

Так как заголовки Apache никогда не генерируются (так как мой CSS не на Apache), мне пришлось сделать несколько вещей:

  1. Перейдите в пользовательский интерфейс Cloud Files и добавьте настраиваемый заголовок (Access-Control-Allow-Origin со значением *) для каждого файла font-awesome.
  2. Измените Content-Type файлов woff и ttf на font/woff и font/ttf соответственно

Посмотрите, сможете ли вы обойтись только с # 1, поскольку второе требует немного работы с командной строкой.

Чтобы добавить пользовательский заголовок в # 1:

  • просмотреть контейнер облачных файлов для файла
  • прокрутите вниз к файлу
  • щелкните значок винтика
  • нажмите Редактировать заголовки
  • выберите Access-Control-Allow-Origin
  • добавить одиночный символ '*' (без кавычек)
  • нажмите ввод
  • повторить для других файлов

Если вам нужно продолжить и сделать # 2, то вам понадобится командная строка с CURL

curl -D - --header "X-Auth-Key: your-auth-key-from-rackspace-cloud-control-panel" --header "X-Auth-User: your-cloud-username" https://auth.api.rackspacecloud.com/v1.0

Из полученных результатов извлеките значения для X-Auth-Token и X-Storage-Url

curl -X POST \
  -H "Content-Type: font/woff" \
  --header "X-Auth-Token: returned-x-auth-token" returned-x-storage-url/name-of-your-container/fonts/fontawesome-webfont.woff

curl -X POST \
  -H "Content-Type: font/ttf" \
  --header "X-Auth-Token: returned-x-auth-token" returned-x-storage-url/name-of-your-container/fonts/fontawesome-webfont.ttf

Конечно, этот процесс работает, только если вы используете Rackspace CDN. Другие CDN могут предлагать аналогичные возможности для редактирования заголовков объектов и изменения типов контента, так что, возможно, вам повезет (и опубликуйте здесь дополнительную информацию).

5
Phil

Для приложения на основе Java добавьте его в файл web.xml:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.ttf</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.otf</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.eot</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.woff</url-pattern>
</servlet-mapping>
3
Neon Sun

Проверьте эту ссылку. Это определенно решит вашу проблему. Существует множество решений для междоменных вызовов GET Ajax НО POST ЗАПРОС НА CROSS DOMAIN IS РЕШЕНО ЗДЕСЬ . Мне потребовалось 3 дня, чтобы понять это.

http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx

2
user2440156

В вашем file.php запроса ajax, можете установить значение header.

<?php header('Access-Control-Allow-Origin: *'); //for all ?>
1
Santos L. Victor