永久移动 POST 请求

Posted

技术标签:

【中文标题】永久移动 POST 请求【英文标题】:Moved POST request permanently 【发布时间】: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 请求?我不想为新端点实现代理。

【问题讨论】:

【参考方案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)。

以上是关于永久移动 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

2,HTTP请求应答返回码

HTTP常见状态码

常见的HTTP请求应答返回码列表

HTTP 请求 - 永久移动?

常见状态码,仍需必备呢~

常见状态码,仍需必备呢~