Contact Number


Email Address

Social Icons
Empowering small to large businesses since 2008

Fulfilling all your IT needs at single stop
CIN: U74999PB2016PTC045616​GSTIN: ​​03AACCO3599B1ZO

Specify a Cache Validator

Specify a Cache Validator

Analyzing the report of website using Pingdom, GTmetrix, or Google PageSpeed Insights is common. But the problem arises when we are trying to fix the warnings. One of the warnings in the performance report is "Specify a cache validator" which landed you on this article. 

This article will surely quench your thirst for the solution you are looking for. 

Point to be noted.

Before starting, there is something you need to know that is, you can only fix this if request are on your server. But if you are using a 3rd party request then you are unable to control their web servers. In this case you are free to share the article link with the concerned party.   

Why this warning occurs?

This arises due to missing HTTP cache headers which needs to be included on every origin server response. It is important because it validates and set the length of the cache. When headers are not found, it will generate a new request for the resource every time, and thus increases the load on your server.

What happens if you utilize caching header?

It ensures that subsequent requests don’t have to be loaded from the server and thus it will save bandwidth and improve the performance for the user. 

How to fix the warning "Specify a cache validator"?

To fix the issue you need to know four types of headers. Two headers fall in the same category, namely last modified header and Etag header. These are used to validate the cache, which means they check the last modification made in the file.  Next two headers, namely Cache-control and Expires help to determine how long the file should be held in cache. 

  • Last- Modified Header
    • This header is usually sent by server automatically, so there is no need to add it manually. It checks if the file was modified since the last time it was requested and checks if it needs to get the newer version or can load from the local cache. You can see the value of last modified in the header of the Pingdom or ChromeDevTools. 
  • ETag Header
    • This header is also similar to the last-modified header. It also validates the cache of a file. This identifies the version of the file with a string of characters. Whenever changes occur in the file a new version of the Etag is generated. It is a type of fingerprints and sometimes used to track the server. This tag is automatically added to the Apache 2.4 or higher using  FileETag directive. Since 2016, Etag is enabled by default
  • Cache-Control 
    • This defines the length of the cache. The properties associated to it are max-age, s-maxage, max-stale, min-fresh, stale-while-revalidate, stale-if-error, and cacheability (public, private, no-cache, no-store). 
      • Public: It shows that any cache can store the response.
      • Private: It means it is cacheable only by the browser accessing the file.
      • Max-age: It defines the amount of time for which it is cacheable.

As in the above example, it can be seen that the max-age directive is 604800 seconds which is equal to seven days. 

To configure this in Apache, add the code below to  your .htaccess file. 

<filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">Header set Cache-Control "max-age=604800, public" </filesMatch>

To configure this in NGINX, add the code below to your config. File. The files are located in the /etc/nginx/ directory and the primary configuration file is /etc/nginx/nginx.conf.

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { add_header Cache-Control "public"; }

  • Expires
    • This is the last step and can be skipped if cache-control is properly set up. The difference between the two headers is that cache control lets you define the period of time before the cache expires and whereas expires uses a date. 

To configure in Apache, use below code:


<IfModule mod_expires.c>

ExpiresActive On

ExpiresByType image/jpg "access 1 year"

ExpiresByType image/jpeg "access 1 year"

ExpiresByType image/gif "access 1 year"

ExpiresByType image/png "access 1 year"

ExpiresByType text/css "access 1 month"

ExpiresByType application/pdf "access 1 month"

ExpiresByType application/javascript "access 1 month"

ExpiresByType application/x-javascript "access 1 month"

ExpiresByType application/x-shockwave-flash "access 1 month"

ExpiresByType image/x-icon "access 1 year"

ExpiresDefault "access 7 days"



To configure in Nginx, 

"location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires 7d; }"


This article describes all the details essential to fix the warning related to "Specify a cache validator".  Hopefully you enjoyed this article and learned everything you need to know about cache validator. 

Leave a Reply

Your email address will not be published. Required fields are marked *

Follow Us