Search code examples
cachinghttp-headersgoogle-font-api

Why Google Api fonts last-modified keep changing?


When I make a request to a Google Api font (e.g. https://fonts.googleapis.com/css?family=Roboto:400), the last-modified header is always changing to the current time.

Caching doesn't work as a result and the file has to be downloaded every load. Is there a reason for this? Should I download the file and host it on my server?


Solution

  • Should I download the file and host it on my server?

    Absolutely not, because the content of the CSS files is dynamic and has different content for every user agent. This is because not all browsers support all font formats. Some require WOFF/WOFF2, others require EOT, TTF or SVG. By downloading and serving the file statically you will break font support for all other browsers.

    Interestingly though, I do not see a last-modified header at all:

    HTTP/1.1 200 OK
    Access-Control-Allow-Origin: *
    Content-Type: text/css
    Alt-Svc: clear
    Alternate-Protocol: 443:quic,p=0
    X-XSS-Protection: 1; mode=block
    Server: GSE
    Expires: Mon, 14 Dec 2015 09:14:21 GMT
    Timing-Allow-Origin: *
    Cache-Control: private, max-age=86400
    Date: Mon, 14 Dec 2015 09:14:21 GMT
    Content-Length: 222
    Connection: close
    X-Content-Type-Options: nosniff
    X-Frame-Options: SAMEORIGIN
    

    The Expires header indeed is the same as the Date - so it expires at the time the ressource was loaded. The max-age option of Cache-Control though has higher precedence. So the file should be cached by the browser for 1 day.