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]「修補程式/admin-api/services/12872 HTTP/1.1」404 14「https://www.example.com/admin-dashboard /”...

    192.168.0.1 - 管理者使用者 [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 },
       }),
     });
    
  • 阿帕契版本 2.4.6。我知道技術上Unix 套接字的實現於2.4.7,但所有其他功能都有效。我也嘗試過切換到“常規”端口,但得到了相同的結果。

相關內容