diff --git a/packages/next/next-server/server/image-optimizer.ts b/packages/next/next-server/server/image-optimizer.ts index df6575a3cbc8d..7a5c64093b55a 100644 --- a/packages/next/next-server/server/image-optimizer.ts +++ b/packages/next/next-server/server/image-optimizer.ts @@ -135,9 +135,8 @@ export async function imageOptimizer( const upstreamRes = await fetch(href) if (!upstreamRes.ok) { - server.logError( - new Error(`Unexpected status ${upstreamRes.status} from upstream ${href}`) - ) + res.statusCode = upstreamRes.status + res.end('"url" parameter is valid but upstream response is invalid') return { finished: true } } diff --git a/test/integration/image-optimizer/test/index.test.js b/test/integration/image-optimizer/test/index.test.js index 5d7c96d857bfa..73233695b4e1c 100644 --- a/test/integration/image-optimizer/test/index.test.js +++ b/test/integration/image-optimizer/test/index.test.js @@ -218,6 +218,16 @@ function runTests({ w, isDev }) { expect(await res.text()).toBe(`"url" parameter is invalid`) }) + it('should fail when url fails to load an image', async () => { + const url = `http://localhost:${appPort}/not-an-image` + const query = { w, url, q: 100 } + const res = await fetchViaHTTP(appPort, '/_next/image', query, {}) + expect(res.status).toBe(404) + expect(await res.text()).toBe( + `"url" parameter is valid but upstream response is invalid` + ) + }) + it('should use cached image file when parameters are the same', async () => { await fs.remove(imagesDir)