PATCH-Anfrage gibt 404 zurück, POST und GET funktionieren

PATCH-Anfrage gibt 404 zurück, POST und GET funktionieren

Ich arbeite an einer Webanwendung, die mit einer benutzerdefinierten REST-API interagiert. Es handelt sich im Grunde genommen um eine Datentabelle, die über die Anwendung aktualisiert wird. Ich versuche, diePATCHMethode für die Updates, aber Apache gibt einen 404-Fehler zurück, wenn ich die Anfrage sende.

Das Seltsame ist, dass GET- und POST-Anfragen an dieselbe URL einwandfrei funktionieren. Ich kann den Code für die REST-API als Workaround ändern, aber meines Wissens ist PATCH mehr "richtig", wie wir die Anfrage in der API verwenden.

Ein paar Details:

  • Es scheint, dass Apache die Anfrage blockiert, bevor sie die benutzerdefinierte REST-API erreicht. Ich kann sowohl PATCH- als auch GET-Anfragen in den Apache-Zugriffsprotokollen sehen, aber nur die GET-Anfrage erscheint im benutzerdefinierten REST-API-Protokoll (FWIW, die benutzerdefinierte REST-API ist implementiert inFlasche) mitWaffenhornals Hosting-Server.

    Beispiele für Apache-Zugriffsprotokolldatensätze:

    192.168.0.1 – unbekannt [27.08.2021:18:23:27 +0000] „PATCH /admin-api/services/12872 HTTP/1.1“ 404 14 „https://www.example.com/admin-dashboard/“ …

    192.168.0.1 - Admin-Benutzer [27.08.2021:18:23:43 +0000] "GET /admin-api/services/12872 HTTP/1.1" 200 988 "-" ...

  • Mir ist aufgefallen, dass die PATCH-Anfrage den Benutzernamen durch „unbekannt“ ersetzt. Das ließ mich glauben, dass etwas mit CORS nicht stimmte. Ich fand ein „Header"-Konfiguration, in der OPTIONS und PATCH fehlten, also habe ich sie hinzugefügt. Das Problem besteht immer noch. Unten sehen Sie die aktuelle Konfiguration der Option:

    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, PATCH"
    
  • Ich sehe keine Pre-Flight OPTIONS-Anfragen in den Apache-Protokollen oder im Browser-Konsolenfenster. Ich habe es mit Google Chrome (92.0) und Firefox (91.0) versucht.

  • Die PATCH-Anfragen haben den Header „access-control-allow-origin“ auf „POST, GET, OPTIONS, PATCH“ gesetzt.

  • Die Apache-Proxy-Konfiguration verwendet einen Unix-Socket als Proxy für Gunicorn:

    <Location /admin-api>
      ProxyPass unix:/run/admin-api.sock|http://127.0.0.1
    </Location>
    
  • JavaScript-Abrufanforderung: ( apiUrlund idsind Variablen, die zuvor in der Funktion festgelegt wurden):

    let resp = await fetch(`${apiUrl}/services/${id}`, {
       credentials: "include",
       method: "PATCH",
       headers: {
         "Content-Type": "application/json",
         Accept: "application/json",
       },
       body: JSON.stringify({
         data: { min: 1, max: 3 },
       }),
     });
    
  • Apache Version 2.4.6. Ich weiß, dasstechnischUnix-Sockets wurden implementiert in2.4.7, aber alle anderen Funktionen funktionieren. Ich habe auch versucht, auf „normale“ Ports umzuschalten, aber ich erhalte das gleiche Ergebnis.

verwandte Informationen