Кеширование шрифтовых шрифтов

Я использую @font-face для встраивания шрифта, размещенного на TypeFront, но мой шрифт не кэшируется браузером (Firefox 3.6.13 и Epiphany 2.30.2). Это вызывает FOUC (Flash of Unstyled Content) на Firefox и MFOMT (мгновенная вспышка пропавшего текста, я только что сделал это) на Epiphany каждый раз, когда страница загружается (я в порядке с FOUC/MFOMT в первый раз страница загружается, но не каждый раз).

Я пытаюсь избежать необходимости вставлять шрифт в CSS в Base64, если это возможно, и я не могу разместить шрифт самостоятельно.

Почему шрифт не кэшируется? Есть ли альтернативная бесплатная служба размещения шрифтов, которая не имеет этой проблемы?

Страница тестирования:

<!DOCTYPE html>
<html>
    <head>
        <title>TypeFront Cache Test</title>
        <style>
            @font-face {
                font-family: "Journal";
                src: url("http://typefront.com/fonts/825588825.ttf") format("truetype");
            }
            h1 {
                font-family: "Journal";
            }
        </style>
    </head>
    <body>
        <h1>Test text</h1>
    </body>
</html>

Если я наблюдаю в Firebug, вкладка Net показывает, что шрифт подается с "200 OK" каждый раз, когда загружается страница, вместо "304 Not Modified" или других указаний на то, что используется кешированный шрифт (например, браузер даже не пытается HTTP-запрос).

Заголовки HTTP:

Response Headers

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 26 Feb 2011 12:57:18 GMT
Content-Type: font/ttf
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK
Content-Transfer-Encoding: binary
Access-Control-Allow-Origin: *
Content-Disposition: attachment; filename="typefront_735a460727.ttf"
Cache-Control: max-age=31536000
Expires: Sun, 26 Feb 2012 12:57:18 GMT
Content-Encoding: gzip

Request Headers

GET /fonts/825588825.ttf HTTP/1.1
Host: typefront.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null

Ответы

Ответ 1

UPDATE Nov-2016. Сеть распространения контента Coral, описанная ниже, больше не работает.


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

Он называется Coral и работает, добавляя .nyud.net к любому URL, например

http://www.example.com/static/MyFont.ttf

становится

http://www.example.com.nyud.net/static/MyFont.ttf.

Больше нечего делать. По первому запросу серверы Coral извлекают и кэшируют файл (ожидают некоторую задержку), а затем обслуживают его, не проверяя снова (они редко проверяются только для новых версий).

Используется расширенное расширение DNS, записи DNAME, поэтому он может не работать с очень старыми операционными системами или DNS-резольверами, хотя известно, что работает что-то достаточно недавнее. Таким образом, запросы направляются на географически закрытый сервер.