Skip to content

Commit 4e62cd8

Browse files
authored
Add headers from server.headers to HTML asset responses (#10173)
* Add failing test * Add headers set via to asset responses * Add changeset
1 parent 8ba7736 commit 4e62cd8

File tree

6 files changed

+64
-0
lines changed

6 files changed

+64
-0
lines changed

.changeset/shaky-experts-beg.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@cloudflare/vite-plugin": patch
3+
---
4+
5+
Ensure that headers set via `server.headers` in the Vite config are added to HTML asset responses in development.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { describe, expect, test } from "vitest";
2+
import { getResponse, isBuild } from "../../../__test-utils__";
3+
4+
describe.runIf(!isBuild)(
5+
"adds headers included in Vite's `server.headers` to asset responses in dev",
6+
() => {
7+
test("adds headers to HTML responses", async () => {
8+
const response = await getResponse();
9+
const headers = await response.allHeaders();
10+
expect(headers).toMatchObject({
11+
"custom-string": "string-value",
12+
"custom-string-array": "one, two, three",
13+
"custom-number": "123",
14+
});
15+
});
16+
17+
test("adds headers to non-HTML responses", async () => {
18+
const response = await getResponse("/vite.svg");
19+
const headers = await response.allHeaders();
20+
expect(headers).toMatchObject({
21+
"custom-string": "string-value",
22+
"custom-string-array": "one, two, three",
23+
"custom-number": "123",
24+
});
25+
});
26+
}
27+
);

packages/vite-plugin-cloudflare/playground/react-spa/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"build": "vite build --app",
77
"check:types": "tsc --build",
88
"dev": "vite dev",
9+
"dev:server-headers": "vite dev -c ./vite.config.server-headers.ts",
910
"preview": "vite preview"
1011
},
1112
"dependencies": {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { cloudflare } from "@cloudflare/vite-plugin";
2+
import react from "@vitejs/plugin-react";
3+
import { defineConfig } from "vite";
4+
5+
export default defineConfig({
6+
server: {
7+
headers: {
8+
"custom-string": "string-value",
9+
"custom-string-array": ["one", "two", "three"],
10+
"custom-number": 123,
11+
},
12+
},
13+
plugins: [react(), cloudflare({ inspectorPort: false, persistState: false })],
14+
});

packages/vite-plugin-cloudflare/src/asset-workers/asset-worker.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import AssetWorker from "@cloudflare/workers-shared/asset-worker";
22
import { UNKNOWN_HOST } from "../shared";
33
import type { Env as _Env } from "@cloudflare/workers-shared/asset-worker";
4+
import type { ResolvedConfig } from "vite";
45

56
interface Env extends _Env {
67
__VITE_HTML_EXISTS__: Fetcher;
78
__VITE_FETCH_HTML__: Fetcher;
9+
__VITE_HEADERS__: string;
810
}
911

1012
export default class CustomAssetWorker extends AssetWorker<Env> {
@@ -13,6 +15,20 @@ export default class CustomAssetWorker extends AssetWorker<Env> {
1315
const modifiedResponse = new Response(response.body, response);
1416
modifiedResponse.headers.delete("ETag");
1517
modifiedResponse.headers.delete("Cache-Control");
18+
// Add headers set via `server.headers` in the Vite config
19+
const viteHeaders = JSON.parse(
20+
this.env.__VITE_HEADERS__
21+
) as ResolvedConfig["server"]["headers"];
22+
23+
for (const [key, value] of Object.entries(viteHeaders)) {
24+
if (Array.isArray(value)) {
25+
for (const item of value) {
26+
modifiedResponse.headers.append(key, item);
27+
}
28+
} else if (value !== undefined) {
29+
modifiedResponse.headers.set(key, String(value));
30+
}
31+
}
1632

1733
return modifiedResponse;
1834
}

packages/vite-plugin-cloudflare/src/miniflare-options.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ export async function getDevMiniflareOptions(config: {
294294
],
295295
bindings: {
296296
CONFIG: assetsConfig,
297+
__VITE_HEADERS__: JSON.stringify(viteDevServer.config.server.headers),
297298
},
298299
serviceBindings: {
299300
__VITE_HTML_EXISTS__: async (request) => {

0 commit comments

Comments
 (0)