Запрос PATCH возвращает 404, POST и GET работают

Запрос PATCH возвращает 404, POST и GET работают

Я работаю над веб-приложением, которое взаимодействует с пользовательским REST API. По сути, это таблица данных, которая обновляется через приложение. Я пытаюсь использоватьПЛАСТЫРЬметод для обновлений, но Apache возвращает ошибку 404, когда я отправляю запрос.

Странно то, что запросы GET и POST к одному и тому же URL работают нормально. Я могу изменить код для REST API в качестве обходного пути, но я понимаю, что PATCH больше "правильный" о том, как мы используем запрос в API.

Некоторые подробности:

  • Похоже, Apache блокирует запрос до того, как он попадет в пользовательский REST API. Я вижу запросы PATCH и GET в журналах доступа Apache, но в журнале пользовательского REST API появляется только запрос GET (FWIW, пользовательский REST API реализован вФляга) с использованиемГуникорнкак хостинг-сервер.

    Пример записей журнала доступа Apache:

    192.168.0.1 - неизвестно [27/авг./2021:18:23:27 +0000] "ИСПРАВЛЕНИЕ /admin-api/services/12872 HTTP/1.1" 404 14 "https://www.example.com/admin-dashboard/" ...

    192.168.0.1 - adminuser [27/08/2021:18:23:43 +0000] "GET /admin-api/services/12872 HTTP/1.1" 200 988 "-" ...

  • Я заметил, что запрос PATCH заменяет имя пользователя на "unknown". Это навело меня на мысль, что с CORS что-то не так. Я нашел "Заголовок" конфигурация, в которой отсутствовали OPTIONS и PATCH, поэтому я их добавил. Все еще наблюдаю ту же проблему. Ниже приведена текущая конфигурация параметра:

    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, PATCH"
    
  • Я не вижу предварительных запросов OPTIONS в журналах Apache или окне консоли браузера. Я пробовал с Google Chrome (92.0) и Firefox (91.0).

  • Запросы PATCH имеют заголовок "access-control-allow-origin", установленный на "POST, GET, OPTIONS, PATCH"

  • Конфигурация прокси-сервера Apache использует сокет Unix для проксирования в Gunicorn:

    <Location /admin-api>
      ProxyPass unix:/run/admin-api.sock|http://127.0.0.1
    </Location>
    
  • Запрос на выборку JavaScript: ( apiUrlи id— это переменные, заданные ранее в функции):

    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 версии 2.4.6. Я знаю, чтотехническиСокеты Unix были реализованы в2.4.7, но все остальные функции работают. Я также пробовал переключаться на "обычные" порты, но я получаю тот же результат.

Связанный контент