因為 HTML 表單不允許像 PUT 或 DELETE 這樣的 HTTP 請求,只有 GET 和 POST,所以我使用 fetch API 發送 PUT 請求。然后我使用 location.assign() 重定向頁面,并帶有來自 302 服務器回應的 Location 標頭。
const res = await fetch('https://example.org/test', {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data)
}).catch(err => console.error(err));
if (res.status >= 300 && res.status < 400) {
window.location.assign(res.headers.get("Location"));
}
問題是新的重定向請求也是 PUT 請求,而我希望 window.location.assign 將使用 GET 請求。為什么它使用 PUT 的先前 HTTP 動詞,我該如何防止呢?
uj5u.com熱心網友回復:
我自己想通了。
它不是window.location.assign()使用最后一個 HTTP 動詞。它fetch()會自動跟隨重定向。它具有選項重定向,默認選項“跟隨”。使用不同的 HTTP 動詞來跟蹤自己的重定向并沒有一個很好的解決方案,因為重定向狀態基本上意味著必須通過不同的 URL 訪問相同的資源。因此,最好的解決方案是讓服務器以 200 Ok 的狀態回應,并提供有關如何訪問下一頁的說明。(我只是設定了 Location 標頭)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444878.html
標籤:javascript http 浏览器 放
下一篇:顫振回傳空體但它不是空的
