Рейтинг:0

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

флаг sd

Я работаю над веб-приложением, которое взаимодействует с пользовательским API REST. По сути, это таблица данных, которая обновляется через приложение. я пытаюсь использовать ПЛАСТЫРЬ для обновлений, но 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/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 - adminuser [27/Aug/2021:18:23:43 +0000] "GET /admin-api/services/12872 HTTP/1.1" 200 988 "-" ...

  • Одна вещь, которую я заметил, это то, что запрос PATCH заменяет имя пользователя на «неизвестно». Это заставило меня поверить, что что-то не так с CORS. я нашел "Заголовок" конфигурация, в которой отсутствовали ОПЦИИ и ИСПРАВЛЕНИЕ, поэтому я добавил их. Все еще вижу ту же проблему. Ниже приведена текущая конфигурация параметра:

    Заголовок всегда устанавливает 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 и я бы переменные, установленные ранее в функции):

    let resp = await fetch(`${apiUrl}/services/${id}`, {
       учетные данные: "включить",
       метод: "ПАТЧ",
       заголовки: {
         "Тип контента": "приложение/json",
         Принять: "приложение/json",
       },
       тело: JSON.stringify({
         данные: {минимум: 1, максимум: 3},
       }),
     });
    
  • Апач версии 2.4.6. я знаю это технически Сокеты Unix были реализованы в 2.4.7, но все остальные функции работают. Я также пытался переключиться на «обычные» порты, но получил тот же результат.

Michael Hampton avatar
флаг cz
Проверьте маршрутизацию и журналы вашего приложения. Похоже, это проблема с приложением, а не с веб-сервером.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.