Problem
The static-file server's MIME table lacks .xml and .webmanifest, so those are served as application/octet-stream.
Repro
for f in /rss.xml /site.webmanifest /browserconfig.xml /robots.txt; do
curl -s -o /dev/null -w "$f -> %{content_type}\n" "http://localhost:3000$f"
done
# /rss.xml, /site.webmanifest, /browserconfig.xml -> application/octet-stream
# /robots.txt -> text/plain (control: correct)
Bodies are byte-correct, so this is Content-Type only. But: some browsers reject a web app manifest unless it's application/manifest+json, and feed readers/browsers may download rss.xml (the <head> advertises type="application/rss+xml") instead of handling it.
There is no app-level escape hatch — next.config headers() does not override the Content-Type of public/static files.
Suggested fix
Add to the static CONTENT_TYPES table (server/static-file-cache.ts):
.xml → application/xml; charset=utf-8
.webmanifest → application/manifest+json
Problem
The static-file server's MIME table lacks
.xmland.webmanifest, so those are served asapplication/octet-stream.Repro
Bodies are byte-correct, so this is Content-Type only. But: some browsers reject a web app manifest unless it's
application/manifest+json, and feed readers/browsers may downloadrss.xml(the<head>advertisestype="application/rss+xml") instead of handling it.There is no app-level escape hatch —
next.configheaders()does not override the Content-Type of public/static files.Suggested fix
Add to the static
CONTENT_TYPEStable (server/static-file-cache.ts):.xml→application/xml; charset=utf-8.webmanifest→application/manifest+json