Default page cache responses
By default, the following responses are cached by the VIP page cache for WordPress and Node.js environments:
- Responses with an HTTP Status Code of
200 OK, including WordPress posts, pages, archives, the home page,/graphql, etc., are cached at the edge cache server locations for 30 minutes by default.- For browser cache control purposes these responses are sent with a
cache-controlHTTP response header ofmax-age=300, must-revalidateby default. - Changes made to WordPress site content will automatically notify the edge caches of the new data and trigger a purge of cached versions of that content. The next incoming request for that content will be sent to origin and the response will be served then stored in cache.
- Because the rendered HTML for a request is cached for up to 30 minutes, the references to updated static asset files could be up to 30 minutes out of date. The version number on an enqueued asset must be updated to prompt VIP to use the new concatenated versions when JS or CSS has been edited.
- A stale response could be served by the page cache up to 12 hours for a cached object outside of a resource’s set
max-agewhile the page cache fetches an updated response from the origin to serve for future requests.
- For browser cache control purposes these responses are sent with a
- Redirects with a
301 Moved PermanentlyHTTP status are cached for 30 minutes. - Responses with
302 Foundand307 Temporary RedirectHTTP status are cached for 1 minute. - Responses with
404 Not FoundHTTP status are cached for 10 seconds. - Responses with
410 GoneHTTP status are cached for 1 minute. - All responses to unauthenticated, non-error, read (
GET/HEAD) requests to the WordPress REST API are cached for 1 minute. The TTL Manager plugin in VIP MU plugins sets the 1 minute caching rule for the WP REST API endpoint.
Note
Requests made with HEAD or GET HTTP request methods are cached. By design, incoming requests to the origin that use the HTTP HEAD method are transformed into GET requests by the page cache. As a result, the value of $_SERVER['REQUEST_METHOD'] for those requests will be GET. For this reason, avoid logic at the origin that depends on detecting HEAD requests.
HTTP status code responses that are not cached
The following responses are not cached by default for WordPress and Node.js environments:
206 Partial Content400 Bad Request403 Forbidden416 Range Not Satisfiable429 Too Many Requests431 Request Header Fields Too Large- All
5xxresponses
Uncacheable URLs
A URL will be marked as uncacheable for 10 seconds if:
- it has a TTL less than or equal to 0 AND a response status code less than
500 - OR it has a
Set-Cookieheader (set withsetcookie()) - OR it has a
Cache-Controlheader with a private value - OR it has a
Varyheader with a value of*.
Cache bypass
The following types of requests made to a WordPress or Node.js environment will bypass the page cache:
- All requests sent with an HTTP
Authorizationheader. - All requests made with
POST,PUT, orDELETEHTTP request methods. - All requests made to an environment with Basic Authentication enabled.
- All requests made to WordPress environments by logged-in users.
- All requests made by a user with a PHP session.
Additional cache bypass behavior:
- The presence of certain cookies will cause the page cache to be bypassed.
no-cacheheaders are respected vianocache_headers(). However, useno-cacheheaders cautiously as they will result in a poor cache hit rate.- Responses with
401 Unauthorizedand431 Request Header Fields Too LargeHTTP status codes are not cached.
Logged-in users, commenters, requests to modify state (such as POST requests), and requests for pages not actively cached at the edge will be routed to the WordPress site’s origin servers, which run the site’s code and database.
Last updated: November 24, 2025