SPA-Fallback beantwortet auch HEAD
Discord prueft die im Portal hinterlegte Datenschutz- und AGB-Adresse mit einer HEAD-Anfrage. Der Fallback behandelte nur GET, alles andere lief in reply.code(404) — Discord bekam eine 404 und lehnte die Adresse mit "URL ist nicht erlaubt" ab. Im Cloudflare-Log nachgewiesen: 35.190.130.193 (Google LLC, dort laeuft Discord), python-requests, Methode HEAD, Pfad /datenschutz, und ausdruecklich "nicht eingedaemmt" — Cloudflare hat also durchgelassen, die 404 kam von uns. Damit sind auch zwei Verdaechtigungen vom Tisch: weder Bot Fight Mode (war ohnehin aus) noch AI Crawl Control. Letzteres hatte nur meine eigenen Abrufe geblockt, was mich faelschlich glauben liess, der RSS-Feed sei fuer alle tot. Er ist es nicht. Geprueft gegen den echten Fastify-Aufbau, ueber eine echte TCP-Verbindung statt app.inject(): HEAD /datenschutz und /impressum liefern 200, text/html, korrekte Content-Length und keinen Rumpf. API-Pfade bleiben unangetastet (HEAD /api/settings weiter 401). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+6
-1
@@ -210,7 +210,12 @@ export async function startWebServer(client) {
|
||||
const isApiPath = ['/api', '/auth', '/webhooks', '/sso'].some((p) =>
|
||||
request.url.startsWith(p)
|
||||
);
|
||||
if (request.method === 'GET' && !isApiPath) {
|
||||
// HEAD gehört dazu: Prüfer, die nur die Erreichbarkeit testen,
|
||||
// fragen so an — Discord etwa, wenn du im Portal eine Datenschutz-
|
||||
// oder AGB-Adresse hinterlegst. Ohne HEAD kam dort eine 404 zurück
|
||||
// und Discord lehnte die Adresse als „nicht erlaubt" ab.
|
||||
// Node lässt den Rumpf bei HEAD von selbst weg.
|
||||
if ((request.method === 'GET' || request.method === 'HEAD') && !isApiPath) {
|
||||
return sendInjected(request, reply);
|
||||
}
|
||||
return reply.code(404).send({ error: 'not found' });
|
||||
|
||||
Reference in New Issue
Block a user