PATCH 请求返回 404,POST 和 GET 工作

PATCH 请求返回 404,POST 和 GET 工作

我正在开发一个与自定义 REST API 交互的 Web 应用程序。它基本上是一个通过应用程序更新的数据表。我尝试使用修补方法进行更新,但是当我发送请求时,Apache 返回 404 错误。

奇怪的是,对同一 URL 的 GET 和 POST 请求工作正常。我可以更改 REST API 的代码作为解决方法,但我的理解是 PATCH 更“正确的“了解我们如何在 API 中使用请求。

一些细节:

  • Apache 似乎在请求到达自定义 REST API 之前阻止了该请求。我可以在 Apache 访问日志中看到 PATCH 和 GET 请求,但只有 GET 请求出现在自定义 REST API 日志中(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/8/2021:18:23:43 +0000] "GET /admin-api/services/12872 HTTP/1.1" 200 988 "-" ...

  • 我注意到的一件事是,PATCH 请求将用户名替换为“未知”。这让我相信 CORS 出了问题。我发现了一个“标头“配置缺少 OPTIONS 和 PATCH,所以我添加了它们。仍然看到同样的问题。以下是该选项的当前配置:

    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, PATCH"
    
  • 我在 Apache 日志或浏览器控制台窗口中没有看到预检 OPTIONS 请求。我尝试使用 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 获取请求:(apiUrlid是函数中先前设置的变量):

    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,但其他所有功能均正常。我也尝试过切换到“常规”端口,但结果相同。

相关内容