【问题标题】:How to redirect after a successful DELETE request成功删除请求后如何重定向
【发布时间】:2011-04-25 18:05:05
【问题描述】:

我有一个执行删除请求的 HTML 表单(方法 = POST & hidden X-HTTP-Method-Override = DELETE)

DELETE请求成功后,如何告诉浏览器重定向到另一个页面? 303+标头位置好吗?

目前,浏览器不会显示空响应,而是保留之前的响应(我猜是因为 204 状态码)。 如果我添加位置标头(仍然是 204 状态代码),它不会更改位置。

使用 303+location 我有所需的行为,但我想知道 303 是否是成功删除后的有效状态代码。 202 (Accepted) DELETE 怎么样?

【问题讨论】:

  • 这是一个 POST 请求,而不是一个 DELETE 请求。
  • @JulianReschke API 实际上是 DELETE 请求,但在所有主要浏览器中都不可能在没有 javascript 的情况下执行 DELETE 请求(它只是此处页面中的一个
    )。所以api寻找X-HTTP-Method-Override表单参数来覆盖http方法
  • 没有浏览器支持在表单中删除。它不是 HTML 的一部分。无论如何:一个 POST 请求就是一个 POST 请求,无论你附加了多少自定义标头。
  • @JulianReschke 是的,也许我不应该在问题中提及这一点。我想知道的是成功删除的正确状态代码是什么。我滥用表单参数来伪造 http 方法是无关的

标签: rest http redirect http-delete


【解决方案1】:

303 plus 位置是最好的选择。不要担心“成功的 DELETE”是什么或意味着什么,因为您使用的是 POST,它具有不同的语义集,而 303 是为redirecting POST requests 量身定制的:

10.3.4 303 查看其他

可以在不同的 URI 下找到对请求的响应,并且应该在该资源上使用 GET 方法检索。此方法的存在主要是为了允许 POST 激活脚本的输出将用户代理重定向到选定的资源。新的 URI 不是原始请求资源的替代引用。 303 响应不得缓存,但对第二个(重定向)请求的响应可能是可缓存的。

【讨论】:

  • 也许我不应该说我正在使用 POST 请求:我在这里使用 POST 请求只是因为我不能在 HTML 表单(没有 javascript)中删除请求其他客户端将执行删除请求。控制器将 POST+X-HTTP-method-override=DELETE 请求视为 DELETE 请求。无论如何,如果没有人想出更好的解决方案,我想我会坚持 303 并将您的回复标记为答案:)
  • 我选择 HTTP DELETE,并在返回正确的 204 以与 REST 无关时,我在标头中传递了重定向 URL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2017-07-25
  • 2018-07-09
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多