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