Setting Cache-Control Headers
Before You Begin
This guide explains the how to set Cache-Control headers using
@pantheon-systems/drupal-kit
in the next-drupal-starter
, or any Next.js
application using the drupal-kit
.
Cache Control Headers
Our @pantheon-systems/drupal-kit
exports DrupalState, a class that includes a
local store and helper methods to fetch data from Drupal. Included in these
methods is a default Cache-Control header that is set on the response object
that is passed into the DrupalState helper.
The default Cache-Control header value is as follows:
Cache-Control: public, s-maxage=600
In the next section, we will explain how to override this default value.
Overriding Drupal Kit's Default Cache-Control Headers
The @pantheon-systems/drupal-kit
's Drupal State store sets the default header
when you pass in the response object to any of the data fetching methods like
getObject
and getObjectByPath
.
To override this default with your own Cache-Control header value, use the
Next.js res.setHeader
method as shown in the example:
import { DrupalState } from '@pantheon-systems/drupal-kit';
export default function MyPage(props) {
// Page Component here...
}
export async function getServerSideProps(context) {
const { res } = context;
// For the sake of the example, we will create a new instance in getServerSideProps,
// but usually this should be done once somewhere and imported
const store = new DrupalState({
apiBase: 'https://my-drupal-site.com',
defaultLanguage: 'en',
});
const articles = store.getObject({
objectName: 'node--article',
});
const myCacheControlHeader = 'public, max-age=604800, must-revalidate';
// The headers must be set AFTER calling any data fetching methods on the store
// or they will be overridden by those methods.
res.setHeader('Cache-Control', myCacheControlHeader);
// Return props...
}
In Production
Depending on where you deploy, these headers may or may not be respected with regards to caching at the edge. See your platform's documentation to verify.