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)。
因为 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)。