Подтвердить что ты не робот

@Font-Face не будет загружаться через https в IE

EDIT 23-06-2012 10:24 (CET): нашел ответ

Взгляните на нижний ответ. Именно это и решило проблему для меня. IE9 сейчас делает правильный путь. IE8 имеет слегка другой шрифт. Не уверен, какой шрифт, но выглядит "ОК".

Original Question:

Я боролся с этим несколько часов. Для одного из наших клиентов мы разработали интернет-магазин и развиваем его по сравнению с нормальным небезопасным http-соединением. Начиная с 2 дней назад, мы установили SSL-сертификат в домене и заставили каждое соединение с веб-сайтом переходить через домен https с помощью .htaccess

Но по какой-то причине IE (без версии) отображает шрифт, который мы указали в CSS, используя @Font-Face. Вот коды, которые мы используем для шрифтов:

@font-face {
    font-family: 'ProximaNovaLight';
    src: url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.eot');
    src: url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.eot?#iefix') format('embedded-opentype'),
         url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.woff') format('woff'),
         url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.ttf') format('truetype'),
         url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.svg#ProximaNovaLight') format('svg');
    font-weight: normal;
    font-style: normal;
}

Как вы можете видеть, я использую полную ссылку на шрифты, включая https. Я попытался переместить файлы в корень домена в соответствии с доменом сертификатов SSL. Я также пытался использовать относительные пути из CSS, но это также не сработало.

Все шрифты находятся в домене, ни одна из них не является междоменной.

Я столкнулся с двумя другими сообщениями здесь, на SO, описывающими подобные проблемы, один из которых не был решен, другой был, но это не похоже на ту же проблему. В этом случае автору вопроса пришлось добавить заголовки Access-Control-Allow-Origin в файлы запросов woff/ttf/otf/svg. Я также добавил эти заголовки в свой .htaccess, чтобы быть уверенным:

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

У меня вроде как заканчиваются варианты, и все же. Я не сервер-конфигурационный тип, но больше в PHP/MySQL/jQuery, поэтому я думаю, что мои мысли довольно ограничены по сравнению с другими здесь, на SO.

Если у кого есть вариант, который стоит попробовать, просто дайте мне знать!

UPDATE 22-06-2012:

Если я изменю https на http и обновить страницу в IE, мне будет предложено сообщить, что есть незащищенный контент, и у меня есть возможность принять этот контент. Если я выбираю "ДА", мой контент загружается и... шрифт доступен!! Yay.. Однако.. если я изменю его обратно на https, шрифты снова исчезнут.

Не уверен, что я могу узнать из этого (LOL), но, возможно, это дает кому-то небольшую идею.

UPDATE 22-06-2012 #2:

До сих пор я пробовал:

URL ( '//протокол/родственник/font.eot'); URL ( '../файл/родственник/font.eot'); URL ( '/домен/родственник/font.eot'); URL ( 'https://www.secure.tld/font.eot'); URL ( 'HTTP://www.normal.tld/font.eot'); (работает, но с всплывающим окном "Содержит небезопасные элементы в IE"

Я также попытался создать rewriterule, заставляющий FilesMatch (woff, ttf, otf, eot, svg) подключиться к http://. Это не сработало, как я думал, и у меня нет подсказки, что он вообще что-то сделал.

Я также добавил:

AddType application/vnd.ms-fontobject .eot
AddType font/truetype .ttf
AddType font/opentype .otf
AddType font/opentype .woff
AddType image/svg+xml .svg .svgz

В папку, содержащую шрифты (в файлах .htaccess), а также в основном файле .htaccess.

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

UPDATE 23-06-2012:

Проверял журналы сервера DirectAdmin. По-видимому, IE запрашивает шрифты (я вижу eot файл с вопросительным знаком, я предполагаю, что это eot с запросом iefix и woff). Все, что было запрошено, также получает ответ на заголовок 200 OK, который не делает для меня ничего более ясного.

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

Кроме того, на основе "Журнала консоли F12" - в IE. Я могу ясно видеть, что шрифты запрашиваются - https - с ответом 200 OK. Странно то, что я вижу только 3 из 4 шрифтов, которые я использую, но возможно, что четвертый не используется на главной странице.

4b9b3361

Ответ 1

Итак, я как раз понял, как работает IE, Safara, Firefox и Chrome.

Поскольку все, что я пробовал, не сработало, я пытался найти способ, который мог бы "встраивать" шрифты в любом случае на мои сайты, на мой CSS или на мой сервер. Добавленный шрифт на мой сервер не был вариантом в зависимости от моего сервера-парня, поэтому я решил вернуться к Font-Squirrel и посмотреть, есть ли опция, которую они предложили при преобразовании шрифтов.

Я перезагрузил свои шрифты и выбрал режим экспорта. Где-то в нижней части полей настроек он говорит "Base64 Encode", к счастью, я знал, что это значит (я могу представить себе кого-то, кто не просто просматривает эту опцию), поэтому я создал свои CSS файлы с установленными шрифтами base64.

Это работает безупречно. Конечно, это сделало мои файлы CSS более крупными (5kb против 129kb). Но я не вижу большого приключения в размере 100 КБ с текущими подключениями к Интернету.

Просто для сравнения, CSS без кодировки base64:

@font-face {
    font-family: 'ProximaNovaSemibolds';
    src: url('../font-face/proximanova-semibold-webfont.eot');
    src: url('../font-face/proximanova-semibold-webfont.eot?#iefix') format('embedded-opentype'),
         url('../font-face/proximanova-semibold-webfont.woff') format('woff'),
         url('../font-face/proximanova-semibold-webfont.ttf') format('truetype'),
         url('../font-face/proximanova-semibold-webfont.svg#ProximaNovaSemibold') format('svg');
    font-weight: normal;
    font-style: normal;
}

CSS с кодировкой Base64:

@font-face {
    font-family: 'ProximaNovaBold';
    src: url('proximanova-bold-webfont-webfont.eot');
    }

@font-face {
    font-family: 'ProximaNovaBold';
    src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAF+8ABMAAAAArzAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcYT+YZ0dERUYAAAHEAAAALQAAADIC+wHsR1BPUwAAAfQAAAf7AAAURoqljoZHU1VCAAAJ8AAAACAAAAAgbJF0j09TLzIAAAoQAAAAWwAAAGB+FsNBY21hcAAACmwAAAGdAAAB+uY47ZljdnQgAAAMDAAAADoAAAA..alotmorecharacters...FDmYlYoTkE8HdsTFF2cwU74AAU/lecUAAA==) format('woff'),
         url('proximanova-bold-webfont-webfont.ttf') format('truetype'),
         url('proximanova-bold-webfont-webfont.svg#ProximaNovaBold') format('svg');
    font-weight: normal;
    font-style: normal;

}

Ответ 2

Определенно, с той же проблемой. Комбинация IE (в нашем случае версия 11/Trident 7) Ошибка возникает, когда все условия встречаются:

HTTPS, заголовок без кэша

В некоторых доменах, которые администрируются отдельно, это непростая проблема для обхода

Ответ 3

У меня было точно такое же поведение с IE и https. IE попытался загрузить 3 из 4 шрифтов, но как только сервер доставил ресурс, IE распался и перешел к следующему шрифту. Наконец, шрифт не был загружен, и сайт выглядел дрянным. В моем случае HTTP-заголовок "pragma = no-cache" был тем, что путало IE. После удаления из ответа все работало гладко. Смотрите также мою запись в блоге, в которой объясняется трюк с Wildfly и Undertow: Блог

UPDATE:

В то же время я открыл ошибку при подключении к Microsoft: https://connect.microsoft.com/IE/feedbackdetail/view/992569/font-face-not-working-with-internet-explorer-and-http-header-pragma-no-cache

Если вы хотите, чтобы они исправили проблему, проголосуйте за ошибку.

Ответ 4

Вы можете заставить его работать с помощью Webfont-Loader, разработанного Google и Typkit:

Он добавляет некоторые накладные расходы, но дает вам больше контроля над загрузкой шрифтов (например, классы, которые позволяют вам устанавливать разные стили, пока шрифты еще не загружены). Возможно, стоит попробовать, настройка для вашего собственного css кажется простой.

Ответ 5

Рабочее решение для Apache/2.2.15 - добавить .htaccess Он предотвращает кеширование файлов шрифтов даже для https

<FilesMatch "\.(woff)$">
    Header unset Cache-control
</FilesMatch>

<FilesMatch "\.(eot)$">
    Header unset Cache-control
</FilesMatch>

Ответ 6

Не устанавливайте заголовок запроса Vary на https

Загрузка шрифтов

Vary:Accept-Encoding,https

Работы

Vary:Accept-Encoding

Тот же ответ здесь.