@@ -125,10 +125,13 @@ export async function createRender({
125
125
} ,
126
126
) => {
127
127
const forMatchpathname = matchPathname ?? getPathname ( req ) ;
128
-
129
128
const [ routeInfo , params ] = matchRoute ( router , forMatchpathname ) ;
129
+ const framework = metaName || 'modern-js' ;
130
+ const fallbackHeader = `x-${ cutNameByHyphen ( framework ) } -ssr-fallback` ;
131
+ let fallbackReason = null ;
130
132
131
133
const onFallback = async ( reason : FallbackReason , error ?: unknown ) => {
134
+ fallbackReason = reason ;
132
135
return onFallbackFn ?.( reason , { logger, reporter, metrics } , error ) ;
133
136
} ;
134
137
@@ -154,7 +157,7 @@ export async function createRender({
154
157
155
158
const renderMode = await getRenderMode (
156
159
req ,
157
- metaName || 'modern-js' ,
160
+ fallbackHeader ,
158
161
routeInfo . isSSR ,
159
162
forceCSR ,
160
163
nodeReq ,
@@ -227,7 +230,10 @@ export async function createRender({
227
230
default :
228
231
throw new Error ( `Unknown render mode: ${ renderMode } ` ) ;
229
232
}
230
-
233
+ // inject ssr fallback header info
234
+ if ( fallbackReason ) {
235
+ response . headers . set ( fallbackHeader , `1;reason=${ fallbackReason } ` ) ;
236
+ }
231
237
return response ;
232
238
} ;
233
239
}
@@ -313,16 +319,14 @@ async function renderHandler(
313
319
314
320
async function getRenderMode (
315
321
req : Request ,
316
- framework : string ,
322
+ fallbackHeader : string ,
317
323
isSSR ?: boolean ,
318
324
forceCSR ?: boolean ,
319
325
nodeReq ?: IncomingMessage ,
320
326
onFallback ?: ( reason : FallbackReason , err ?: unknown ) => Promise < void > ,
321
327
) : Promise < 'ssr' | 'csr' | 'data' > {
322
328
const query = parseQuery ( req ) ;
323
329
324
- const fallbackHeader = `x-${ cutNameByHyphen ( framework ) } -ssr-fallback` ;
325
-
326
330
if ( isSSR ) {
327
331
if ( query . __loader ) {
328
332
return 'data' ;
0 commit comments