Web Open Font Format (.woff)
W3C Tiêu chuẩnWeb Open Font Format (WOFF) là định dạng phông chữ web mở thế hệ đầu tiên mang tính lịch sử được W3C chứng nhận, đóng gói các phông chữ TrueType hoặc OpenType tiêu chuẩn cùng với dữ liệu nén zlib và siêu dữ liệu cấp phép XML.
Kiểm tra & Siêu dữ liệu
Các hệ điều hành và trình phân tích tệp nhận dạng tệp WOFF bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:
Chữ ký ở đầu tệp (mẫu byte nhận diện)
Các hệ điều hành và trình phân tích tệp nhận dạng tệp WOFF bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:
CHỮ KÝ HEX (OFFSET 0):
77 4F 46 46BIỂU DIỄN ASCII: wOFF
Tiêu chuẩn hóa: W3C Recommendation (2012)
Thông số kỹ thuật
| Kiến trúc Container | Tiêu đề WOFF 44 byte, tiếp theo là thư mục bảng, dữ liệu bảng nén zlib, siêu dữ liệu mở rộng và dữ liệu riêng tư tùy chọn |
| Nén | Nén Deflate (zlib) riêng cho từng bảng phông chữ |
| Thứ tự byte | Big-endian (tiêu chuẩn SFNT) |
| Không gian màu | Kế thừa từ các bảng phông chữ bên dưới |
| Kênh & Cấu trúc | Đường viền glyph TrueType ('glyf') hoặc PostScript ('CFF '), số đo và tính năng kiểu chữ |
| Kích thước tối đa | Tối đa 65.535 glyph cho mỗi tệp phông chữ |
| Độ trong suốt | Kế thừa từ định dạng phông chữ bên dưới |
| Truyền phát & Tăng dần | Giải nén lần lượt từng bảng cho phép tải phông chữ theo luồng |
Ma trận so sánh kỹ thuật: WOFF so với các đối thủ
| Thuộc tính kỹ thuật | WOFF (Hiện tại) | WOFF2 | TTF | OTF |
|---|---|---|---|---|
| Bộ giải mã nén | Deflate (zlib) theo bảng | Brotli với tiền xử lý bảng | SFNT chưa nén | SFNT chưa nén |
| Chữ ký nhận diện | wOFF (0x77 0x4F 0x46 0x46) | wOF2 (0x77 0x4F 0x46 0x32) | 0x00 0x01 0x00 0x00 | OTTO (0x4F 0x54 0x54 0x4F) |
| Dung lượng tệp tương đối | Thường nhỏ hơn TTF; mức tiết kiệm tùy phông chữ. | Thường nhỏ hơn TTF; mức tiết kiệm tùy phông chữ. | Tiêu chuẩn cơ sở (100%) | Tiêu chuẩn cơ sở (100%) |
| Môi trường mục tiêu | Trình duyệt web cũ (IE9+, Safari 5+) | Khả năng hỗ trợ tùy thuộc vào trình duyệt. | Hệ điều hành máy tính để bàn | Xuất bản trên máy tính để bàn & in ấn |
Các dạng hỏng thường gặp và hướng dẫn khôi phục bằng mã hex
Cảnh báo bảng điều khiển trình duyệt: 'Không thể giải mã phông chữ đã tải xuống: Lỗi phân tích cú pháp OTS'.
Nguyên nhân gốc rễ: Độ dài bảng chưa nén được khai báo không khớp hoặc luồng zlib bị hỏng.
Khắc phục: Nén lại các bảng phông chữ hoặc chuyển đổi sang WOFF2 bằng Trình chuyển đổi phông chữ File2File.app.
Phân tích bảo mật và các đường tấn công nhằm vào bộ phân tích cú pháp
Trình duyệt web phân tích cú pháp các tệp WOFF được tải xuống từ các miền web không đáng tin cậy bằng Công cụ làm sạch OpenType (OTS) để chặn các payload khai thác.
Các véc-tơ tấn công đã biết
- Đọc quá giới hạn bộ đệm trong quá trình giải nén zlib của các khối bảng phông chữ bị hỏng.
- Các trường độ dài bảng không khớp kích hoạt lỗi tràn bộ đệm heap trong các trình kết xuất phông chữ.
- Từ chối dịch vụ thông qua kiệt quệ bộ nhớ trong quá trình mở rộng bảng phông chữ.
Biện pháp phòng thủ tốt nhất: Luôn làm sạch các tệp WOFF đã tải xuống bằng OTS trước khi chuyển đến các công cụ phông chữ của hệ điều hành.
Nguồn gốc lịch sử và các cột mốc
Ưu điểm & Lợi ích chính
- Có thể giảm dung lượng phông chữ web so với tệp TTF hoặc OTF thô; mức giảm tùy thuộc phông chữ và bộ mã hóa.
- Khả năng tương thích ngược phổ quát trên mọi trình duyệt web máy tính để bàn và di động được phát hành kể từ năm 2011.
- Bao gồm một khối siêu dữ liệu XML tùy chọn cho cấp phép phông chữ, thông tin ghi công tác giả và thông tin bản quyền của nhà đúc chữ.
Hạn chế & Nhược điểm kỹ thuật
- Trong nhiều quy trình web, định dạng này đã được WOFF2 thay thế; WOFF2 dùng nén Brotli và biến đổi bảng phông chữ, còn mức tiết kiệm dung lượng khác nhau.
- Không thể cài đặt trực tiếp vào hệ điều hành máy tính để bàn (Windows/Mac) nếu không chuyển đổi sang TTF/OTF.
- Thuật toán nén zlib cũ kém hiệu quả hơn các bộ mã hóa entropy hiện đại.
Thông tin kỹ thuật thú vị
- Các byte nhận diện của WOFF 1.0 là 'wOFF' (0x77 0x4F 0x46 0x46), còn WOFF 2.0 dùng 'wOF2'.
- Các xưởng đúc kiểu chữ đồng ý cho phép phông chữ của họ trên web chỉ sau khi WOFF được tạo ra, bởi vì định dạng chứa chuyên biệt này giúp phân biệt phông chữ web với phông chữ máy tính để bàn có thể bị sao chép trái phép.
- WOFF ban đầu được triển khai trong Firefox 3.6 vào năm 2010 trước khi trở thành khuyến nghị chính thức của W3C.
Các câu hỏi kỹ thuật thường gặp
Sự khác biệt giữa WOFF và WOFF2 là gì?
WOFF sử dụng nén zlib, trong khi WOFF2 sử dụng thuật toán Brotli mới hơn của Google và các phép biến đổi bảng, tạo ra các tệp có dung lượng nhỏ hơn khoảng 30% so với WOFF.
Làm cách nào để chuyển đổi font WOFF sang TTF hoặc OTF để sử dụng trên máy tính?
Bạn có thể chuyển đổi các tệp WOFF thành font TTF hoặc OTF có thể cài đặt trên máy tính trong vài giây bằng cách sử dụng File2File.app trực tiếp trong trình duyệt web của bạn.
Tôi có còn cần WOFF 1.0 trên các trang web hiện đại không?
Không. Tất cả các trình duyệt hiện đại đều hỗ trợ nguyên bản WOFF2. WOFF 1.0 chỉ cần thiết nếu bạn bắt buộc phải hỗ trợ các trình duyệt cũ đã lỗi thời như Internet Explorer.