Cloudflare Workers の Static Assets は、通常ではある URL に対して directory
に指定したディレクトリ以下にある静的ファイルのマッチングが優先され、 main
の Worker には到達しないが、これを逆にするオプションがある。
wrangler.json の場合は次のように設定できる:
{
"assets": {
"binding": "ASSETS",
"directory": "./public",
"run_worker_first": true
}
}
このように設定すると、静的ファイルへのアクセスより前に main
の Worker を実行できるため、ヘッダーを見て認証するようなことが可能になる。ただし、厳密に言えば静的ファイルへのアクセスがなくなるため、 fallback 的に Static Assets へ Worker からリクエストを投げる必要がある。
export default {
async fetch(request, env, ctx): Promise<Response> {
// ....
return env.ASSETS.fetch(request);
},
} satisfies ExportedHandler<Env>;