File tree Expand file tree Collapse file tree
packages/astro/src/assets/endpoint Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ---
2+ " astro " : patch
3+ ---
4+
5+ Fixes assets endpoint in serverless returning 404 in certain situations where the website might be under a protected route
Original file line number Diff line number Diff line change @@ -7,9 +7,12 @@ import { isRemoteAllowed } from '../utils/remotePattern.js';
77// @ts -expect-error
88import { imageConfig } from 'astro:assets' ;
99
10- async function loadRemoteImage ( src : URL ) {
10+ async function loadRemoteImage ( src : URL , headers : Headers ) {
1111 try {
12- const res = await fetch ( src ) ;
12+ const res = await fetch ( src , {
13+ // Forward all headers from the original request
14+ headers,
15+ } ) ;
1316
1417 if ( ! res . ok ) {
1518 return undefined ;
@@ -41,15 +44,16 @@ export const GET: APIRoute = async ({ request }) => {
4144
4245 let inputBuffer : ArrayBuffer | undefined = undefined ;
4346
44- const sourceUrl = isRemotePath ( transform . src )
47+ const isRemoteImage = isRemotePath ( transform . src ) ;
48+ const sourceUrl = isRemoteImage
4549 ? new URL ( transform . src )
4650 : new URL ( transform . src , url . origin ) ;
4751
48- if ( isRemotePath ( transform . src ) && isRemoteAllowed ( transform . src , imageConfig ) === false ) {
52+ if ( isRemoteImage && isRemoteAllowed ( transform . src , imageConfig ) === false ) {
4953 return new Response ( 'Forbidden' , { status : 403 } ) ;
5054 }
5155
52- inputBuffer = await loadRemoteImage ( sourceUrl ) ;
56+ inputBuffer = await loadRemoteImage ( sourceUrl , isRemoteImage ? new Headers ( ) : request . headers ) ;
5357
5458 if ( ! inputBuffer ) {
5559 return new Response ( 'Not Found' , { status : 404 } ) ;
You can’t perform that action at this time.
0 commit comments