Skip to content

Commit 3755048

Browse files
committed
study: CORS
1 parent 4acdedd commit 3755048

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

src/routes/_middleware.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,55 @@
11
import { FreshContext } from "$fresh/server.ts";
22

3+
const HTTP_HEADER = {
4+
ACCESS_CONTROL_ALLOW_ORIGIN: "Access-Control-Allow-Origin",
5+
ACCESS_CONTROL_ALLOW_METHODS: "Access-Control-Allow-Methods",
6+
ACCESS_CONTROL_ALLOW_CREDENTIALS: "Access-Control-Allow-Credentials",
7+
ACCESS_CONTROL_ALLOW_HEADERS: "Access-Control-Allow-Headers",
8+
};
9+
10+
const HTTP_METHOD = {
11+
GET: "GET",
12+
PUT: "PUT",
13+
POST: "POST",
14+
DELETE: "DELETE",
15+
OPTIONS: "OPTIONS",
16+
};
17+
318
interface State {
419
data: string;
520
}
621

722
export async function handler(
8-
_req: Request,
23+
req: Request,
924
ctx: FreshContext<State>,
1025
) {
11-
ctx.state.data = "myData";
26+
if (req.method == HTTP_METHOD.OPTIONS) {
27+
const resp = new Response(null, {
28+
status: 204,
29+
});
30+
const origin = req.headers.get("Origin") || "*";
31+
const headers = resp.headers;
32+
headers.set(HTTP_HEADER.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
33+
headers.set(HTTP_HEADER.ACCESS_CONTROL_ALLOW_METHODS, HTTP_METHOD.DELETE);
34+
return resp;
35+
}
36+
37+
const origin = req.headers.get("Origin") || "*";
1238
const resp = await ctx.next();
39+
const headers = resp.headers;
40+
41+
headers.set(HTTP_HEADER.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
42+
headers.set(HTTP_HEADER.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
43+
headers.set(
44+
HTTP_HEADER.ACCESS_CONTROL_ALLOW_HEADERS,
45+
"Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With",
46+
);
47+
headers.set(
48+
HTTP_HEADER.ACCESS_CONTROL_ALLOW_METHODS,
49+
`${HTTP_METHOD.POST}, ${HTTP_METHOD.OPTIONS}, ${HTTP_METHOD.GET}, ${HTTP_METHOD.DELETE}, ${HTTP_METHOD.PUT}`,
50+
);
51+
52+
ctx.state.data = "myData";
1353
resp.headers.set("server", "fresh server");
1454
return resp;
1555
}

0 commit comments

Comments
 (0)