From 4491df9f97fda431f4eeef460945b21e9ab3309e Mon Sep 17 00:00:00 2001 From: Marcin Date: Thu, 11 Jun 2026 18:42:02 +0100 Subject: [PATCH] fix: ignore .woff2 and modern static-asset extensions The static-asset ignore list predates woff2 and other modern web formats. Because matching is suffix-based (EndsWith on the lowercased path), '.woff' does not cover '.woff2', so bot requests for woff2 fonts were proxied to the Prerender service instead of passing through. Verified live on prerender.io itself: Googlebot requesting inter-*.woff2 received a 504 while a normal UA received a 200 (.css/.js correctly bypassed). Adds .woff2, .otf, .eot, .webp, .avif and .webmanifest to ExtensionsToIgnore, per integration-contract CONTRACT.md section 3 (prerender/integration-contract#1). The existing case-insensitive suffix matching is already contract-compliant and is kept as is. Co-Authored-By: Claude Fable 5 --- PrerenderMiddleware.cs | 1 + tests/PrerenderMiddlewareTests.cs | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/PrerenderMiddleware.cs b/PrerenderMiddleware.cs index c6ad2df..bd293b6 100644 --- a/PrerenderMiddleware.cs +++ b/PrerenderMiddleware.cs @@ -25,6 +25,7 @@ public class PrerenderMiddleware : IMiddleware ".exe", ".wmv", ".avi", ".ppt", ".mpg", ".mpeg", ".tif", ".wav", ".mov", ".psd", ".ai", ".xls", ".mp4", ".m4a", ".swf", ".dat", ".dmg", ".iso", ".flv", ".m4v", ".torrent", ".ttf", ".woff", ".svg", + ".woff2", ".otf", ".eot", ".webp", ".avif", ".webmanifest", ]; private readonly IHttpClientFactory _httpClientFactory; diff --git a/tests/PrerenderMiddlewareTests.cs b/tests/PrerenderMiddlewareTests.cs index df8ff58..5e1da0e 100644 --- a/tests/PrerenderMiddlewareTests.cs +++ b/tests/PrerenderMiddlewareTests.cs @@ -80,6 +80,19 @@ public async Task BotRequest_StaticAsset_PassesThrough() Assert.Equal("normal response", await response.Content.ReadAsStringAsync()); } + [Fact] + public async Task BotRequest_FontAsset_PassesThrough() + { + using var server = CreateServer(); + var client = server.CreateClient(); + client.DefaultRequestHeaders.Add("User-Agent", BotUserAgent); + + var response = await client.GetAsync("/fonts/inter.woff2"); + + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal("normal response", await response.Content.ReadAsStringAsync()); + } + [Fact] public async Task EscapedFragment_TriggersPrerender() {