Static assets get no configurable headers on native Cloudflare deploys of framework apps
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 50/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- typescript, vite
- Área
- cloud
Línea de trabajo
Start by tracing uploadAssets, readGeneratedAssetHeaders, and planAssetWorkerBypass for native Cloudflare deploys, then compare their behavior with the TanStack Start asset configuration described here. Check or add coverage for user-authored _headers and fingerprinted assets; done means the reported cache headers are applied to static assets, or the docs accurately describe the limitation.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
A TanStack Start app deployed with void deploy --platform cloudflare serves its static assets without any configurable headers:
- A
public/_headersfile is copied todist/client/_headers, but it never applies in production.uploadAssetsignores/_headers, andreadGeneratedAssetHeadersonly sends a file whose first line is Void's generated marker ("A user-authored_headersis not sent on this path"). - Void's own immutable caching for fingerprinted bundles never runs either.
planAssetWorkerBypassonly applies when the builtwrangler.jsonhasassets.run_worker_first: ["/**"], and the TanStack Start build has only"assets": { "directory": "../client" }. With the_headersfile removed, the build generates no_headersat all. - As a result, hashed files under
/assets/are served with Cloudflare's defaultCache-Control: public, max-age=0, must-revalidate. Browsers revalidate every JS and CSS chunk on every page view.
This contradicts two docs pages:
guide/edge/static-assets.md("Native Cloudflare deployments"): "Withvoid deploy --platform cloudflare, generated JavaScript bundles with content fingerprints receive immutable caching."guide/edge/headers.md("Framework_headersfiles"): "Void reads_headersfiles produced by supported frameworks."
Reproduction
[email protected],@tanstack/[email protected], Vite 8, deployed withvoid deploy --platform cloudflarevoid.config.tssetscloudflare.cache.enabled, a custom domain route, a D1 binding and noroutingoptionspublic/_headers:/assets/* Cache-Control: public, max-age=31536000, immutable- After deploy,
curl -sI https://<site>/assets/<hashed>.jsshowscache-control: public, max-age=0, must-revalidate. CSS is the same.
I also tried routing.headers in void.config.ts ('/assets/*': ['Cache-Control: public, max-age=31536000, immutable']). In the local preview (vite preview in workerd), assets still came back with max-age=0, must-revalidate. I didn't deploy that variant, since the assets are served without starting the Worker, so I don't expect the rules to reach them.
Expected
One of these, for framework apps on native Cloudflare deploys:
- send a user-authored
_headerswith the asset upload (as Wrangler does), - generate the immutable
_headersfor fingerprinted files even withoutrun_worker_first, or - apply
routing.headersto static assets.
Failing those, the docs should say framework apps on --platform cloudflare get no asset headers.
Workaround
A Response Header Transform Rule on the zone that sets Cache-Control: public, max-age=31536000, immutable for a 200 under /assets/.
- Lenguaje dominante
- TypeScript
- Estrellas
- 627
- Forks
- 66
- Merge medio
- 13 h 57 min
- PR fusionados (30 d)
- 194
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de voidzero-dev/void
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
voidzero-dev/void#677 ·
Los mantenedores suelen responder en 1 día
-
Export a guard for `VoidActionError` at every statusPosiblemente ocupada @karthickeyan-dev la tomó hoy. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 78/100
voidzero-dev/void#714 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
voidzero-dev/void#713 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
`@void/solid`: `useParams()` keeps the first page's params after client-side navigationPosiblemente ocupada @yujiym la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 20/100
voidzero-dev/void#708 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 28/100
voidzero-dev/void#692 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de voidzero-dev/void
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Open-Earth-Foundation/CityCatalyst#3399 ·
Los mantenedores suelen responder en 2 días
-
userReport
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
nkprasad12/morcus-net#631 ·
Los mantenedores suelen responder en 1 día
-
fix(app): fail closed if GetGeneralSetting fails during initializationPosiblemente ocupada @kalavt la tomó hoy. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
nekko-labs/nekko-agent#1756 ·
Los mantenedores suelen responder en 1 día
-
needs-area-label
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
Los mantenedores suelen responder en 2 días