location.assign() 使用最后一个 HTTP 动词

location.assign() uses last HTTP verb

因为 HTML 表单不允许像 PUT 或 DELETE 这样的 HTTP 请求,只允许 GET 和 POST,我正在使用提取 API 发送 PUT 请求。然后我使用 location.assign() 和来自 302 服务器响应的位置 header 重定向页面。

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 动词,我该如何防止它?

我自己想出来了。

并不是说 window.location.assign() 使用了最后一个 HTTP 动词。 fetch() 会自动跟随重定向。它有选项 redirect,默认选项为“follow”。没有一个很好的解决方案可以遵循使用不同的 HTTP 动词重定向自己,因为重定向状态基本上意味着必须通过不同的 URL 访问相同的资源。因此,最好的解决方案是让服务器以 200 Ok 状态响应,并给出有关如何访问下一页的说明。 (我只是设置了位置header)。