Web Open Font Format (.woff)
W3C СтандартWeb Open Font Format (WOFF): це історичний вебформат шрифтів першого покоління, відкритий стандарт, схвалений W3C. Він дає змогу обгортати стандартні шрифти TrueType або OpenType, додаючи стиснення zlib і метадані ліцензування XML.
Аналіз та метадані
Операційні системи та аналізатори файлів ідентифікують файли WOFF, перевіряючи початкову послідовність бінарних байтів:
Сигнатура заголовка на байтовому рівні (Magic Bytes)
Операційні системи та аналізатори файлів ідентифікують файли WOFF, перевіряючи початкову послідовність бінарних байтів:
ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):
77 4F 46 46ПОДАННЯ В ASCII: wOFF
Стандартизація: W3C Recommendation (2012)
Технічні характеристики
| Архітектура контейнера | 44-байтовий заголовок WOFF, за яким ідуть каталог таблиць, дані таблиць, стиснені zlib, необов’язкові розширені метадані та приватні дані |
| Стиснення | Стиснення Deflate (zlib) застосовується до кожної окремої таблиці шрифту |
| Порядок байтів (Endianness) | Порядок байтів від старшого до молодшого (стандарт SFNT) |
| Колірні простори | Успадковані від таблиць базового шрифту |
| Канали та структура | Контури гліфів TrueType («glyf») або PostScript («CFF »), метрики та типографічні функції |
| Максимальні розміри | До 65 535 гліфів у файлі шрифту |
| Прозорість | Успадковується від базового формату шрифту |
| Потокове та прогресивне завантаження | Розпакування кожної таблиці окремо дає змогу завантажувати шрифт потоково |
Технічна матриця порівняння: WOFF проти конкурентів
| Технічний атрибут | WOFF (Поточний) | WOFF2 | TTF | OTF |
|---|---|---|---|---|
| Кодек стиснення | Deflate (zlib) для кожної таблиці | Brotli з попередньою обробкою таблиць | Нестиснений SFNT | Нестиснений SFNT |
| Магічний підпис | wOFF (0x77 0x4F 0x46 0x46) | wOF2 (0x77 0x4F 0x46 0x32) | 0x00 0x01 0x00 0x00 | OTTO (0x4F 0x54 0x54 0x4F) |
| Відносний розмір файлу | Часто менший за TTF; економія залежить від шрифту. | Часто менший за TTF; економія залежить від шрифту. | Базовий стандарт (100%) | Базовий стандарт (100%) |
| Цільове середовище | Застарілі веббраузери (IE9+, Safari 5+) | Підтримка залежить від браузера. | Операційні системи для ПК | Настільні видавничі системи та друк |
Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі
Попередження в консолі браузера: 'Failed to decode downloaded font: OTS parsing error'.
Першопричина: Невідповідність заявленої довжини нестисненої таблиці або пошкоджений потік zlib.
Відновлення: Повторно стисніть таблиці шрифтів або конвертуйте у WOFF2 за допомогою конвертера шрифтів File2File.app.
Аналіз безпеки та векторів атак на парсери
Веббраузери розбирають файли WOFF, завантажені з неперевірених доменів, за допомогою OpenType Sanitizer (OTS), щоб блокувати шкідливе навантаження експлойтів.
Відомі вектори атак
- Читання за межами буфера під час розпакування zlib пошкоджених блоків таблиць шрифтів.
- Невідповідність полів довжини таблиць спричиняє переповнення буфера в динамічній пам’яті засобів рендерингу шрифтів.
- Відмова в обслуговуванні через вичерпання пам'яті під час розширення таблиці шрифтів.
Рекомендації щодо захисту: Завжди очищуйте завантажені файли WOFF за допомогою OTS, перш ніж передавати їх засобам рендерингу шрифтів операційної системи.
Історичне походження та віхи
Основні переваги
- Може зменшити розмір файлів вебшрифтів порівняно з вихідними файлами TTF або OTF; ступінь зменшення залежить від шрифту й кодера.
- Універсальна зворотна сумісність з усіма настільними та мобільними веббраузерами, випущеними після 2011 року.
- Містить необов’язковий блок метаданих XML із ліцензійною інформацією про шрифт, згадками про авторів та відомостями про авторські права виробника шрифту.
Технічні обмеження та недоліки
- У багатьох вебпроцесах його замінив WOFF2, який використовує стиснення Brotli та перетворення таблиць шрифтів; економія розміру файлу різниться.
- Не може бути встановлений безпосередньо в десктопні операційні системи (Windows/Mac) без конвертації в TTF/OTF.
- Застарілий алгоритм стиснення zlib є менш ефективним, ніж сучасні ентропійні кодери.
Цікаві технічні факти
- Магічні байти для WOFF 1.0: 'wOFF' (0x77 0x4F 0x46 0x46), тоді як WOFF 2.0 використовує 'wOF2'.
- Після появи WOFF виробники шрифтів погодилися публікувати їх в інтернеті, оскільки спеціалізований контейнер відрізняв вебшрифти від піратських шрифтів для настільних систем.
- WOFF спочатку було впроваджено у Firefox 3.6 у 2010 році, перш ніж він став офіційною рекомендацією W3C.
Поширені технічні запитання
У чому різниця між WOFF та WOFF2?
WOFF використовує стиснення zlib, тоді як WOFF2 використовує новіший алгоритм Brotli від Google та трансформації таблиць, що призводить до отримання файлів, які приблизно на 30% менші за WOFF.
Як конвертувати шрифт WOFF у TTF або OTF для використання на десктопі?
Ви можете конвертувати файли WOFF у встановлювані десктопні шрифти TTF або OTF за лічені секунди за допомогою File2File.app безпосередньо у веббраузері.
Чи потрібен мені все ще WOFF 1.0 на сучасних вебсайтах?
Ні. Усі сучасні браузери мають вбудовану підтримку WOFF2. WOFF 1.0 потрібен лише для підтримки застарілих браузерів, як-от Internet Explorer.