Puncte:0

Solicitarea PATCH returnează 404, lucru POST și GET

drapel sd

Lucrez la o aplicație web care interacționează cu un API REST personalizat. Practic este un tabel de date care este actualizat prin intermediul aplicației. Încerc să folosesc PLASTURE pentru actualizări, dar Apache returnează o eroare 404 când trimit cererea.

Lucrul ciudat este că solicitările GET și POST către aceeași adresă URL funcționează bine. Pot schimba codul pentru API-ul REST ca o soluție, dar înțeleg că PATCH este mai mult "corect" pentru modul în care folosim cererea în API.

Cateva detalii:

  • Se pare că Apache blochează solicitarea înainte de a ajunge la API-ul REST personalizat. Pot vedea atât cererile PATCH, cât și GET în jurnalele de acces Apache, dar numai cererea GET apare în jurnalul personalizat API REST (FWIW, API-ul REST personalizat este implementat în Balon) folosind Gunicorn ca server de gazduire.

    Exemple de înregistrări de jurnal de acces Apache:

    192.168.0.1 - necunoscut [27/Aug/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 - administrator [27/Aug/2021:18:23:43 +0000] „GET /admin-api/services/12872 HTTP/1.1” 200 988 „-”...

  • Un lucru pe care l-am observat este că cererea PATCH înlocuiește numele de utilizator cu „necunoscut”. Acest lucru m-a făcut să cred că ceva nu era în regulă cu CORS. am gasit un "Antet" configurație care lipsea OPȚIUNI și PATCH, așa că le-am adăugat. Încă văd aceeași problemă. Mai jos este configurația actuală a opțiunii:

    Antetul setat întotdeauna Access-Control-Allow-Methods „POST, GET, OPTIONS, PATCH”
    
  • Nu văd solicitări de OPȚIUNI înainte de zbor în jurnalele Apache sau în fereastra consolei browserului. Am încercat cu Google Chrome (92.0) și Firefox (91.0).

  • Solicitările PATCH au antetul „access-control-allow-origin” setat la „POST, GET, OPTIONS, PATCH”

  • Configurația proxy Apache folosește un socket Unix pentru a trimite proxy către Gunicorn:

    <Location /admin-api>
      ProxyPass unix:/run/admin-api.sock|http://127.0.0.1
    </Location>
    
  • Cerere de preluare JavaScript: (apiUrl și id sunt variabile setate mai devreme în funcție):

    let resp = await fetch(`${apiUrl}/services/${id}`, {
       acreditări: „include”,
       metoda: "PATCH",
       antete: {
         „Content-Type”: „aplicație/json”,
         Accept: „application/json”,
       },
       body: JSON.stringify({
         date: { min: 1, max: 3 },
       }),
     });
    
  • Apache versiunea 2.4.6. Știu că tehnic Socket-urile Unix au fost implementate în 2.4.7, dar toate celelalte funcționalități funcționează. De asemenea, am încercat să trec la porturi „obișnuite”, dar obțin același rezultat.

Michael Hampton avatar
drapel cz
Verificați rutarea și jurnalele aplicației dvs. Aceasta pare să fie o problemă cu aplicația, nu cu serverul web.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.