Clicky

Sirviendo fuentes desde un CDN

fuentes .htaccess

Código para colocar en el archivo .htaccess o httpd.conf de Apache o Nginx

Para un máximo rendimiento todos sabemos que debemos poner nuestros assets en un CDN (otro dominio). Junto con esos assets están las fuentes web personalizadas. Desafortunadamente las fuentes web personalizados a través de un CDN (o cualquier petición de fuentes entre dominios) no funcionan en Firefox o Internet Explorer (de forma correcta) a pesar de que funcionan (incorrectamente) en los navegadores basados "‹"‹en WebKit. Ellas realmente requieren configuraciones personalizadas CORS para funcionar correctamente. Aquí está el código que tendrá que hacer que eso suceda.

El código .htaccess o httpd.conf

El código puede ser colocado en el archivo .htaccess o httpd.conf de Apache o Nginx:

# Apache config

<FilesMatch ".(eot|ttf|otf|woff)">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

# Nginx config

if ($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){
    add_header Access-Control-Allow-Origin *;
}

# Otra configuración para Ngnix

location ~* "^.*?\.(eot)|(ttf)|(woff)$" {
  add_header Access-Control-Allow-Origin *;
}

Esto ajusta la configuración de Access-Control-Allow-Origin CORS para permitirla funcionar en todos los dominios. Una lista de dominios específicos separados por comas si quieres servir fuentes a sólo dominios específicos. También querrás servir adecuadamente todos los tipos de fuentes en el caso de que el navegador prefiera un tipo.

Para asegurarnos que la cabecera está configurada correctamente, se puede comprobar mediante la utilidad curl:

$ curl -I https://some.cdn.otherdomain.net/media/fonts/somefont.ttf

Si ves en la respuesta Access-Control-Allow-Origin: *, es que está funcionando.

# Resultado

HTTP/1.1 200 OK
Date: Sun, 26 Jan 2014 23:41:02 GMT
Server: Apache
Accept-Ranges: bytes
Content-Length: 18060
Cache-Control: max-age=315360000, public
Expires: Wed, 24 Jan 2024 21:23:02 GMT
Vary: *,User-Agent
Access-Control-Allow-Origin: *
Content-Type: text/plain; charset=UTF-8

Esta misma estrategia es utilizada por Bootstrap CDN, por lo que sé que es bueno.

Jesus_Caceres