Skip to content

Commit 3352159

Browse files
committed
Revert "feat!: remove cache headers"
This reverts commit 9f88d08.
1 parent 7b945f5 commit 3352159

File tree

7 files changed

+419
-8
lines changed

7 files changed

+419
-8
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ plugins: [
3131
allPageHeaders: [], // option to add headers for all pages. `Link` headers are transformed by the below criteria
3232
mergeSecurityHeaders: true, // boolean to turn off the default security headers
3333
mergeLinkHeaders: true, // boolean to turn off the default gatsby js headers
34+
mergeCachingHeaders: true, // boolean to turn off the default caching headers
3435
transformHeaders: (headers, path) => headers, // optional transform for manipulating headers under each path (e.g.sorting), etc.
3536
generateMatchPathRewrites: true, // boolean to turn off automatic creation of redirect rules for client only paths
3637
},

src/__tests__/__snapshots__/build-headers-program.js.snap

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,169 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3+
exports[`build-headers-program with caching headers 1`] = `
4+
"## Created with gatsby-plugin-netlify
5+
6+
/*
7+
X-Frame-Options: DENY
8+
X-XSS-Protection: 1; mode=block
9+
X-Content-Type-Options: nosniff
10+
Referrer-Policy: same-origin
11+
/component---node-modules-gatsby-plugin-offline-app-shell-js-78f9e4dea04737fa062d.js
12+
Cache-Control: public, max-age=31536000, immutable
13+
/0-0180cd94ef2497ac7db8.js
14+
Cache-Control: public, max-age=31536000, immutable
15+
/component---src-templates-blog-post-js-517987eae96e75cddbe7.js
16+
Cache-Control: public, max-age=31536000, immutable
17+
/component---src-pages-404-js-53e6c51a5a7e73090f50.js
18+
Cache-Control: public, max-age=31536000, immutable
19+
/component---src-pages-index-js-0bdd01c77ee09ef0224c.js
20+
Cache-Control: public, max-age=31536000, immutable
21+
/webpack-runtime-acaa8994f1f704475e21.js
22+
Cache-Control: public, max-age=31536000, immutable
23+
/styles.1025963f4f2ec7abbad4.css
24+
Cache-Control: public, max-age=31536000, immutable
25+
/styles-565f081c8374bbda155f.js
26+
Cache-Control: public, max-age=31536000, immutable
27+
/app-f33c13590352da20930f.js
28+
Cache-Control: public, max-age=31536000, immutable
29+
/static/*
30+
Cache-Control: public, max-age=31536000, immutable
31+
/sw.js
32+
Cache-Control: no-cache
33+
/offline-plugin-app-shell-fallback/
34+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
35+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
36+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
37+
Link: </component---node-modules-gatsby-plugin-offline-app-shell-js-78f9e4dea04737fa062d.js>; rel=preload; as=script
38+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
39+
Link: </page-data/offline-plugin-app-shell-fallback/page-data.json>; rel=preload; as=fetch; crossorigin
40+
/hi-folks/
41+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
42+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
43+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
44+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
45+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
46+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
47+
Link: </page-data/hi-folks/page-data.json>; rel=preload; as=fetch; crossorigin
48+
/my-second-post/
49+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
50+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
51+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
52+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
53+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
54+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
55+
Link: </page-data/my-second-post/page-data.json>; rel=preload; as=fetch; crossorigin
56+
/hello-world/
57+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
58+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
59+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
60+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
61+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
62+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
63+
Link: </page-data/hello-world/page-data.json>; rel=preload; as=fetch; crossorigin
64+
/404/
65+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
66+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
67+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
68+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
69+
Link: </component---src-pages-404-js-53e6c51a5a7e73090f50.js>; rel=preload; as=script
70+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
71+
Link: </page-data/404/page-data.json>; rel=preload; as=fetch; crossorigin
72+
/
73+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
74+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
75+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
76+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
77+
Link: </component---src-pages-index-js-0bdd01c77ee09ef0224c.js>; rel=preload; as=script
78+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
79+
Link: </page-data/index/page-data.json>; rel=preload; as=fetch; crossorigin
80+
/404.html
81+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
82+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
83+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
84+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
85+
Link: </component---src-pages-404-js-53e6c51a5a7e73090f50.js>; rel=preload; as=script
86+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
87+
Link: </page-data/404.html/page-data.json>; rel=preload; as=fetch; crossorigin
88+
"
89+
`;
90+
91+
exports[`build-headers-program with manifest['pages-manifest'] 1`] = `
92+
"## Created with gatsby-plugin-netlify
93+
94+
/*
95+
X-Frame-Options: DENY
96+
X-XSS-Protection: 1; mode=block
97+
X-Content-Type-Options: nosniff
98+
Referrer-Policy: same-origin
99+
/component---node-modules-gatsby-plugin-offline-app-shell-js-78f9e4dea04737fa062d.js
100+
Cache-Control: public, max-age=31536000, immutable
101+
/0-0180cd94ef2497ac7db8.js
102+
Cache-Control: public, max-age=31536000, immutable
103+
/component---src-templates-blog-post-js-517987eae96e75cddbe7.js
104+
Cache-Control: public, max-age=31536000, immutable
105+
/component---src-pages-404-js-53e6c51a5a7e73090f50.js
106+
Cache-Control: public, max-age=31536000, immutable
107+
/component---src-pages-index-js-0bdd01c77ee09ef0224c.js
108+
Cache-Control: public, max-age=31536000, immutable
109+
/pages-manifest-ab11f09e0ca7ecd3b43e.js
110+
Cache-Control: public, max-age=31536000, immutable
111+
/webpack-runtime-acaa8994f1f704475e21.js
112+
Cache-Control: public, max-age=31536000, immutable
113+
/styles.1025963f4f2ec7abbad4.css
114+
Cache-Control: public, max-age=31536000, immutable
115+
/styles-565f081c8374bbda155f.js
116+
Cache-Control: public, max-age=31536000, immutable
117+
/app-f33c13590352da20930f.js
118+
Cache-Control: public, max-age=31536000, immutable
119+
/static/*
120+
Cache-Control: public, max-age=31536000, immutable
121+
/sw.js
122+
Cache-Control: no-cache
123+
/offline-plugin-app-shell-fallback/
124+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
125+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
126+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
127+
Link: </component---node-modules-gatsby-plugin-offline-app-shell-js-78f9e4dea04737fa062d.js>; rel=preload; as=script
128+
/hi-folks/
129+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
130+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
131+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
132+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
133+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
134+
/my-second-post/
135+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
136+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
137+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
138+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
139+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
140+
/hello-world/
141+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
142+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
143+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
144+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
145+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
146+
/404/
147+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
148+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
149+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
150+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
151+
Link: </component---src-pages-404-js-53e6c51a5a7e73090f50.js>; rel=preload; as=script
152+
/
153+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
154+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
155+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
156+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
157+
Link: </component---src-pages-index-js-0bdd01c77ee09ef0224c.js>; rel=preload; as=script
158+
/404.html
159+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
160+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
161+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
162+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
163+
Link: </component---src-pages-404-js-53e6c51a5a7e73090f50.js>; rel=preload; as=script
164+
"
165+
`;
166+
3167
exports[`build-headers-program with security headers 1`] = `
4168
"## Created with gatsby-plugin-netlify
5169
@@ -11,6 +175,94 @@ exports[`build-headers-program with security headers 1`] = `
11175
Content-Security-Policy: frame-ancestors 'self' https://*.storyblok.com/
12176
/hello
13177
X-Frame-Options: SAMEORIGIN
178+
/component---node-modules-gatsby-plugin-offline-app-shell-js-78f9e4dea04737fa062d.js
179+
Cache-Control: public, max-age=31536000, immutable
180+
/0-0180cd94ef2497ac7db8.js
181+
Cache-Control: public, max-age=31536000, immutable
182+
/component---src-templates-blog-post-js-517987eae96e75cddbe7.js
183+
Cache-Control: public, max-age=31536000, immutable
184+
/component---src-pages-404-js-53e6c51a5a7e73090f50.js
185+
Cache-Control: public, max-age=31536000, immutable
186+
/component---src-pages-index-js-0bdd01c77ee09ef0224c.js
187+
Cache-Control: public, max-age=31536000, immutable
188+
/webpack-runtime-acaa8994f1f704475e21.js
189+
Cache-Control: public, max-age=31536000, immutable
190+
/styles.1025963f4f2ec7abbad4.css
191+
Cache-Control: public, max-age=31536000, immutable
192+
/styles-565f081c8374bbda155f.js
193+
Cache-Control: public, max-age=31536000, immutable
194+
/app-f33c13590352da20930f.js
195+
Cache-Control: public, max-age=31536000, immutable
196+
/static/*
197+
Cache-Control: public, max-age=31536000, immutable
198+
/sw.js
199+
Cache-Control: no-cache
200+
/offline-plugin-app-shell-fallback/
201+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
202+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
203+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
204+
Link: </component---node-modules-gatsby-plugin-offline-app-shell-js-78f9e4dea04737fa062d.js>; rel=preload; as=script
205+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
206+
Link: </page-data/offline-plugin-app-shell-fallback/page-data.json>; rel=preload; as=fetch; crossorigin
207+
/hi-folks/
208+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
209+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
210+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
211+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
212+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
213+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
214+
Link: </page-data/hi-folks/page-data.json>; rel=preload; as=fetch; crossorigin
215+
/my-second-post/
216+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
217+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
218+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
219+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
220+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
221+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
222+
Link: </page-data/my-second-post/page-data.json>; rel=preload; as=fetch; crossorigin
223+
/hello-world/
224+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
225+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
226+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
227+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
228+
Link: </component---src-templates-blog-post-js-517987eae96e75cddbe7.js>; rel=preload; as=script
229+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
230+
Link: </page-data/hello-world/page-data.json>; rel=preload; as=fetch; crossorigin
231+
/404/
232+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
233+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
234+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
235+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
236+
Link: </component---src-pages-404-js-53e6c51a5a7e73090f50.js>; rel=preload; as=script
237+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
238+
Link: </page-data/404/page-data.json>; rel=preload; as=fetch; crossorigin
239+
/
240+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
241+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
242+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
243+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
244+
Link: </component---src-pages-index-js-0bdd01c77ee09ef0224c.js>; rel=preload; as=script
245+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
246+
Link: </page-data/index/page-data.json>; rel=preload; as=fetch; crossorigin
247+
/404.html
248+
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
249+
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script
250+
Link: </app-f33c13590352da20930f.js>; rel=preload; as=script
251+
Link: </0-0180cd94ef2497ac7db8.js>; rel=preload; as=script
252+
Link: </component---src-pages-404-js-53e6c51a5a7e73090f50.js>; rel=preload; as=script
253+
Link: </page-data/app-data.json>; rel=preload; as=fetch; crossorigin
254+
Link: </page-data/404.html/page-data.json>; rel=preload; as=fetch; crossorigin
255+
"
256+
`;
257+
258+
exports[`build-headers-program without caching headers 1`] = `
259+
"## Created with gatsby-plugin-netlify
260+
261+
/*
262+
X-Frame-Options: DENY
263+
X-XSS-Protection: 1; mode=block
264+
X-Content-Type-Options: nosniff
265+
Referrer-Policy: same-origin
14266
/offline-plugin-app-shell-fallback/
15267
Link: </webpack-runtime-acaa8994f1f704475e21.js>; rel=preload; as=script
16268
Link: </styles-565f081c8374bbda155f.js>; rel=preload; as=script

src/__tests__/build-headers-program.js

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,108 @@ describe(`build-headers-program`, () => {
191191
}
192192
}
193193

194+
it(`with caching headers`, async () => {
195+
const pluginData = await createPluginData()
196+
197+
const pluginOptions = {
198+
...DEFAULT_OPTIONS,
199+
mergeCachingHeaders: true,
200+
}
201+
202+
await buildHeadersProgram(pluginData, pluginOptions, reporter)
203+
204+
expect(reporter.panic).not.toHaveBeenCalled()
205+
const output = await fs.readFile(
206+
pluginData.publicFolder(`_headers`),
207+
`utf8`
208+
)
209+
expect(output).toMatchSnapshot()
210+
expect(output).toMatch(/app-data\.json/)
211+
expect(output).toMatch(/page-data\.json/)
212+
// we should only check page-data & app-data once which leads to 2 times
213+
expect(fs.existsSync).toBeCalledTimes(2)
214+
})
215+
216+
it(`with manifest['pages-manifest']`, async () => {
217+
const pluginData = await createPluginData()
218+
219+
fs.existsSync.mockImplementation(path => {
220+
if (path.includes(`page-data.json`) || path.includes(`app-data.json`)) {
221+
return false
222+
}
223+
224+
return true
225+
})
226+
227+
// gatsby < 2.9 uses page-manifest
228+
pluginData.manifest[`pages-manifest`] = [
229+
`pages-manifest-ab11f09e0ca7ecd3b43e.js`,
230+
]
231+
232+
const pluginOptions = {
233+
...DEFAULT_OPTIONS,
234+
mergeCachingHeaders: true,
235+
}
236+
237+
await buildHeadersProgram(pluginData, pluginOptions, reporter)
238+
239+
expect(reporter.panic).not.toHaveBeenCalled()
240+
const output = await fs.readFile(
241+
pluginData.publicFolder(`_headers`),
242+
`utf8`
243+
)
244+
expect(output).toMatchSnapshot()
245+
expect(output).toMatch(/\/pages-manifest-ab11f09e0ca7ecd3b43e\.js/g)
246+
expect(output).not.toMatch(/\/app-data\.json/g)
247+
expect(output).not.toMatch(/\/page-data\.json/g)
248+
expect(output).not.toMatch(/\/undefined/g)
249+
})
250+
251+
it(`without app-data file`, async () => {
252+
const pluginData = await createPluginData()
253+
254+
// gatsby 2.17.0+ adds an app-data file
255+
delete pluginData.manifest[`pages-manifest`]
256+
257+
const pluginOptions = {
258+
...DEFAULT_OPTIONS,
259+
mergeCachingHeaders: true,
260+
}
261+
fs.existsSync.mockImplementation(path => {
262+
if (path.includes(`app-data.json`)) {
263+
return false
264+
}
265+
266+
return true
267+
})
268+
269+
await buildHeadersProgram(pluginData, pluginOptions, reporter)
270+
271+
expect(reporter.panic).not.toHaveBeenCalled()
272+
const output = await fs.readFile(
273+
pluginData.publicFolder(`_headers`),
274+
`utf8`
275+
)
276+
expect(output).not.toMatch(/app-data\.json/g)
277+
expect(output).not.toMatch(/\/undefined/g)
278+
})
279+
280+
it(`without caching headers`, async () => {
281+
const pluginData = await createPluginData()
282+
283+
const pluginOptions = {
284+
...DEFAULT_OPTIONS,
285+
mergeCachingHeaders: false,
286+
}
287+
288+
await buildHeadersProgram(pluginData, pluginOptions, reporter)
289+
290+
expect(reporter.panic).not.toHaveBeenCalled()
291+
expect(
292+
await fs.readFile(pluginData.publicFolder(`_headers`), `utf8`)
293+
).toMatchSnapshot()
294+
})
295+
194296
it(`with security headers`, async () => {
195297
const pluginData = await createPluginData()
196298

0 commit comments

Comments
 (0)