performance icon indicating copy to clipboard operation
performance copied to clipboard

Add Site Health test to verify that static assets are served with far-future expires

Open westonruter opened this issue 3 years ago • 2 comments

Feature Description

In order to leverage the browser cache effectively, page assets like images, scripts, and stylesheets should all be served with far-future expires. A Site Health test could be added which checks for the necessary asset response headers (i.e. Cache-Control and/or Expires) and warns when they are not present. The call to action would be to fix the web server configuration, potentially prompting the user to contact their host.

westonruter avatar May 03 '22 22:05 westonruter

That makes sense, should we define the cache headers list and what we consider far-future expire?

manuelRod avatar May 09 '22 09:05 manuelRod

I think the headers would be Cache-Control with max-age and/or an Expires. As for the time that should be considered future, I recall generally 1 year as being normal for this. But 1 week would probably work just as well. In any case, the threshold should be filterable.

Also, there could be some cases where an author needs for an asset to not have a far-future expiration date. In that case, there could be a filter to exclude it from the test.

Lastly, in addition to far-future expiration, the test could also check for ETag and Last-Modified and if no far-future expiration is present, do a secondary request to the same asset URL with If-None-Match and If-Modified-Since, respectively. If those return with 304 Not Modified then that could pass the test as well, although not as good as far-future expiration.

westonruter avatar May 09 '22 16:05 westonruter

@westonruter out of curiosity, do you think this is something that a site admin could take direct action on?

joemcgill avatar Nov 27 '24 16:11 joemcgill

That's a good question. Most likely, yes, because a plugin or theme would be responsible for sending that header. The problem then becomes figuring out which is responsible.

Edit: Oops, I thought this comment was about https://github.com/WordPress/performance/issues/1692

westonruter avatar Nov 27 '24 17:11 westonruter

Good question. Maybe not directly. They'd have to ask their host to fix the static asset response headers. But I do know that some plugins can modify .htaccess files to add the required rules, assuming they're on Apache.

westonruter avatar Nov 27 '24 17:11 westonruter