Чому @ font-face кидає помилку 404 на файли woff?


422

Я використовую @font-faceна сайті своєї компанії, і це працює / виглядає чудово. За винятком того, що Firefox та Chrome нанесуть на .woffфайл помилку 404 . IE не видає помилку. У мене є шрифти, розташовані в корені, але я спробував із шрифтами в папці css і навіть дав увесь URL для шрифту. Якщо видалити ці шрифти з мого файлу css, я не отримаю 404, тому я знаю, що це не синтаксична помилка.

Також я використовував інструмент fontsquirrels для створення @font-faceшрифтів та коду:

@font-face {
  font-family: 'LaurenCBrownRegular';
  src: url('/laurencb-webfont.eot');
  src: local('☺'), 
    url('/laurencb-webfont.woff') format('woff'), 
    url('/laurencb-webfont.ttf') format('truetype'), 
    url('/laurencb-webfont.svg#webfontaaFhOfws') format('svg');
  font-weight: normal;
  font-style: normal;
}

@font-face {
  font-family: 'FontinSansRegular';
  src: url('/fontin_sans_r_45b-webfont.eot');
  src: local('☺'), 
    url('/fontin_sans_r_45b-webfont.woff') format('woff'), 
    url('/fontin_sans_r_45b-webfont.ttf') format('truetype'), 
    url('/fontin_sans_r_45b-webfont.svg#webfontKJHTwWCi') format('svg');
  font-weight: normal;
  font-style: normal;
}

яка версія у вас для firefox та chrome? Gecko 1.9.2 (Firefox 3.6) додає підтримку WOFF.
Сотіріс

Спробуйте знову перетворитись у OTF у Woff. У мене була подібна проблема, і розбір файлів був пошкодженим. Це хороший сайт для конвертації в різні типи шрифту. onlinefontconverter.com
stacksonstacksonstacks

Відповіді:


722

У мене спостерігався цей самий симптом - 404 для файлів woff в Chrome - і запускався додаток на Windows Server з IIS 6.

Якщо ви знаходитесь в тій самій ситуації, ви можете виправити це, зробивши наступне:

Рішення 1

"Просто додайте такі декларації типу MIME через IIS Manager (вкладка HTTP заголовки властивостей веб-сайту): .woff application / x-woff "

Оновлення: відповідно до типів MIME для шрифтів woff та Grsmto фактичним типом MIME є application / x-font-woff (принаймні для Chrome). x-woff виправить Chrome 404, x-font-woff виправить попередження Chrome.

Станом на 2017 рік : шрифти Woff тепер стандартизовані як частина специфікації RFC8081 до типу mime font/woffта font/woff2.

IIS 6 MIME типи

Завдяки Seb Duggan: http://sebduggan.com/posts/serving-web-fonts-from-iis

Рішення 2

Ви також можете додати типи MIME у веб-конфігурацію :

  <system.webServer>
    <staticContent>
      <remove fileExtension=".woff" /> <!-- In case IIS already has this mime type -->
      <mimeMap fileExtension=".woff" mimeType="font/woff" />
    </staticContent>    
  </system.webServer>

5
Зауважте, що ви можете отримати помилку Cannot add duplicate collection entry of type ‘mimeMap’ with unique key attribute ‘fileExtension’...через конфлікт із файлом applicationhost.config. Ви можете виправити це, додавши <remove fileExtension=".woff" />право перед тим, як вказати новий mimeMap у файлі web.config, щоб видалити помилковий дублікат.
Піт

11
Тип MIME був стандартизований як application/font-woff.
Фернандо Коррея

5
Це зробило трюк! Якщо у вас є проблема, але з файлом .woff2 просто додайте інший тип MIME (або конфігурацію) з цим розширенням
mapache

2
Схоже, специфікація змінилася (знову). Ваша порада для application/x-font-woffтепер застаріває, а з RFC 8081 правильний тип MIME тепер font/woffі font/woff2. Дивіться оновлену відповідь у вашому пов'язаному питанні
Ліам

3
Це рішення не спрацювало для мене. Що для мене трюк: hotcakescommerce.zendesk.com/hc/en-us/articles/…
Кім Лаге

53

Відповідь на цю публікацію була дуже корисною та великою економією часу. Однак я виявив, що під час використання FontAwesome 4.50мені довелося додати додаткову конфігурацію для woff2типу розширення також, як показано нижче. Інші запити щодо woff2типу давали помилку 404 в Інструментах розробників Chrome під Консоль> Помилки.

Відповідно до коментаря S.Serp, наведену нижче конфігурацію слід помістити в <system.webServer>тег.

<staticContent>
  <remove fileExtension=".woff" />
  <!-- In case IIS already has this mime type -->
  <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
  <remove fileExtension=".woff2" />
  <!-- In case IIS already has this mime type -->
  <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff2" />
</staticContent>

3
і ваш згаданий тег <staticContent>повинен бути всередині <system.webServer>тегу
S.Serpooshan

працює чудово, звітуючи з Windows Server 2012 r2, ASP.Net MVC5.
Кромвель

44

Насправді відповідь @Ian Robinson працює добре, але Chrome продовжить скаржитися на таке повідомлення: " Ресурс інтерпретується як шрифт, але передається за допомогою програми MIME / x-woff "

Якщо ви отримаєте це, ви можете змінитись

додаток / x-woff

до

застосування / х -font -woff

і у вас більше не буде помилок на консолі Chrome!

(тестовано на Chrome 17)


Де ви це міняєте? У браузері чи на сервері?
Джейк Вілсон

Як пояснено у відповіді вище, він повинен бути сервером. Це рішення призначено для Windows Server з IIS 6.
adriendenat

1
хром досі скаржиться на мене з x-font-woff
Sonic Soul

Щоб повторно повторити коментар : Схоже, специфікація змінилася (знову). Ваша порада для application/x-font-woffтепер застаріває, а з RFC 8081 правильний тип MIME тепер font/woffі font/woff2. Дивіться оновлену відповідь у вашому пов'язаному запитанні
Ліам

15

Рішення для IIS7

Я також натрапив на те саме питання. Я думаю, що робити цю конфігурацію з серверного рівня було б краще, оскільки це стосується всіх веб-сайтів.

  1. Перейдіть до кореневого вузла IIS та двічі клацніть на параметр конфігурації "Типи MIME"

  2. Натисніть посилання "Додати" на панелі "Дії" у верхньому правому куті.

  3. Це відкриє діалог. Додайте розширення файлу .woff та вкажіть "application / x-font-woff" як відповідний тип MIME.

Додати тип MIME для розширення імені файлу .woff

Перейдіть до типів MIME

Додати тип MIME

Ось що я зробив, щоб вирішити проблему в IIS 7


2
Зауважте, що відповіді, що стосуються лише посилань, не відштовхують , відповіді на відповідність повинні бути кінцевою точкою пошуку рішення (проти ще однієї зупинки посилань, яка, як правило, з часом зависла). Просимо додати тут окремий конспект, зберігаючи посилання як орієнтир.
Клеопатра

@kleopatra - оновив відповідь деталями та видалив посилання.
Dhanuka777

"Я думаю, що робити цю конфігурацію з серверного рівня було б краще, оскільки це стосується всіх веб-сайтів." - ну, це дійсно залежить. Якщо ви маєте справу з корпоративним сервером, який, можливо, запускає кілька внутрішніх додатків, так, ви маєте рацію. З іншого боку, якщо ви запускаєте загальнодоступний веб-сайт, який розподіляється на декілька серверів, метод web.config виграє з точки зору "послідовності" (тобто він буде там, ви не можете забути налаштувати його на одному сервер).
Балаж

10

Окрім Ian відповіді, я повинен був дозволити розширення шрифту в модулі фільтрації запитів, щоб він працював.

<system.webServer>
  <staticContent>
    <remove fileExtension=".woff" />
    <remove fileExtension=".woff2" />
    <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
    <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff" />
  </staticContent>
  <security>
      <requestFiltering>
          <fileExtensions>
              <add fileExtension=".woff" allowed="true" />
              <add fileExtension=".ttf" allowed="true" />
              <add fileExtension=".woff2" allowed="true" />
          </fileExtensions>
      </requestFiltering>
  </security>    
</system.webServer>

8

Запустіть IIS Server Manager (запустіть команду: inetmgr) Відкрийте типи Mime та додайте наступні

Розширення назви файлу: .woff

Тип MIME : додаток / октет-потік


1

Я спробував багато речей навколо дозволів, типів mime тощо, але для мене вийшло так, що web.config видалив обробник файлів статичних даних у IIS, а потім явно додав його назад до каталогів, у яких були статичні файли. Щойно я додав у свій каталог вузол розташування для свого каталогу та додав обробник назад, запити перестали отримувати 404s.


1

Якщо ви використовуєте CodeIgniter під IIS7:

У своєму файлі web.config додайте woff до шаблону

<rule name="Rewrite CI Index">
  <match url=".*" />
    <conditions>
      <add input="{REQUEST_FILENAME}" pattern="css|js|jpg|jpeg|png|gif|ico|htm|html|woff" negate="true" />
    </conditions>
    <action type="Rewrite" url="index.php/{R:0}" />
 </rule>

Сподіваюся, це допомагає!


0

Це може бути очевидним, але це кілька разів мене спрацьовувало з 404s ... Переконайтеся, що дозволи дозволу на папки шрифтів встановлені правильно.


0

Також перевірте свій переписувач URL-адрес. Він може кинути 404, якщо було знайдено щось "дивне".


0

Якщо у вас немає доступу до конфігурації вашого веб-сервера, ви також можете просто ПОЗНАЧИТИ файл шрифту, щоб він закінчувався у svg (але зберігав формат). Для мене добре працює в Chrome і Firefox.


0

Якщо після додавання типів MIME все ще не працює, перевірте, чи ввімкнено функцію "Анонімна автентифікація" в розділі "Аутентифікація" на сайті та переконайтесь, що вибрано "Ідентифікація пулу програм" відповідно до даного знімка екрана.

введіть тут опис зображення



-1

Вирішили це:

Довелося використовувати метод Mo'Bulletproofer


Це означає, що ви більше не використовуєте WOFF? Можливо, ваш веб-сервер неправильно налаштований для обслуговування WOFF-файлів? Наприклад, це: stackoverflow.com/questions/3594823/mime-type-for-woff-fonts/…
mercator

Я протестував шрифт з кодуванням на інших машинах. Відображає штраф і 404 помилки.
dcp3450

Це не дозволить мені. Кодування - шлях довгий. Пояснюється тут: paulirish.com/2010/font-face-gotchas
dcp3450

1
Посилання у відповіді вже не існує.
Мунім Мунна
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.