【问题标题】:Moved POST request permanently永久移动 POST 请求
【发布时间】:2018-09-14 04:20:49
【问题描述】:

我们的移动应用程序使用 POST 请求来检查其状态。我们需要将此服务迁移到新位置。我们使用新端点发布了新版本的移动应用程序。我计划发布将客户端重定向到新位置的服务更新。

@RequestMapping(value = "/url", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public void performHandShake(HttpServletResponse response) throws IOException {
    response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    response.setHeader("Location", service.getNewUrl());
}

我正在使用 Postman 和当前的 Android 实现测试此服务,但它们都因 HTTP 错误 405 失败 - 方法不允许。似乎他们都重定向到 GET 而不是请求的 POST。是否有任何正确的方法来重定向 POST 请求?我不想为新端点实现代理。

【问题讨论】:

    标签: http retrofit


    【解决方案1】:

    如果您不希望将请求方法从 POST 更改为 GET,请使用 308 而不是 301

    6.4.2. 301 Moved Permanently

    301(永久移动)状态码表示目标 资源已被分配一个新的永久 URI 和任何未来 对该资源的引用应该使用封闭的 URI 之一。 [...]

    注意:由于历史原因,用户代理可能会更改请求 从POSTGET 的方法用于后续请求。如果这 行为不受欢迎,307(临时重定向)状态码 可以改用。

    3. 308 Permanent Redirect

    308(永久重定向)状态码表示目标 资源已被分配一个新的永久 URI 和任何未来 对该资源的引用应该使用封闭的 URI 之一。 具有链接编辑功能的客户端应自动重新链接 对有效请求 URI 的引用 在可能的情况下,由服务器发送的一个或多个新引用。 [...]

    注意:此状态码类似于301(永久移动), 除了它不允许从 POSTGET

    查看answer了解更多详情。

    【讨论】:

    • 不错。不幸的是,当前使用的库 (com.squareup.retrofit2:retrofit:2.1.0) 不支持此代码。而且因为我需要为不升级的现有客户提供解决方案,所以我无法更改库。
    • @LeosLiterak 好吧,你可以试试307 (Temporary Redirect)
    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2019-11-04
    • 2017-07-04
    • 2012-07-10
    相关资源
    最近更新 更多