Proxies readonly requests to Cloudflare R2 via Cloudflare Workers.
- Handles
HEAD
,GET
, andOPTIONS
requests - Forwards caching headers (
etag
,cache-control
,expires
,last-modified
) - Forwards content headers (
content-type
,content-encoding
,content-language
,content-disposition
) - Caches served files using the Cache API
- Ranged requests
- Handles precondition headers (
if-modified-since
,if-unmodified-since
,if-match
,if-none-match
)
npm i -g wrangler
wrangler login
Create your R2 bucket(s) if you haven't already (replace bucket_name
and preview_bucket_name
appropriately):
wrangler r2 bucket create bucket_name # required
wrangler r2 bucket create preview_bucket_name # optional
You can also do this from the Cloudflare dashboard.
Edit wrangler.toml
to have the correct bucket_name
and optionally, preview_bucket_name
(you can set it to bucket_name
) if you're going to run this locally.
You can do this from a fork, if using the GitHub Actions method.
You may edit CACHE_CONTROL
to the default cache-control
header or remove it entirely to fall back to nothing.
Note: Due to how custom domains for workers work, you MUST use a route to take advantage of caching. Cloudflare may fix this soon. Also note that *.workers.dev domains do not cache responses. You MUST use a route to your own (sub)domain.
wrangler publish # or `npm run deploy`
- Fork this repository
- Create and set the R2 bucket names in
wrangler.toml
- Set the secrets
CF_API_TOKEN
andCF_ACCOUNT_ID
in settings - Enable workflows in the Actions tab
- Profit
Install deps:
npm install
To launch the development server:
npm run dev