永久移动 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 之一。 [...]注意:由于历史原因,用户代理可能会更改请求 从
POST
到GET
的方法用于后续请求。如果这 行为不受欢迎,307
(临时重定向)状态码 可以改用。
3. 308 Permanent Redirect
308
(永久重定向)状态码表示目标 资源已被分配一个新的永久 URI 和任何未来 对该资源的引用应该使用封闭的 URI 之一。 具有链接编辑功能的客户端应自动重新链接 对有效请求 URI 的引用 在可能的情况下,由服务器发送的一个或多个新引用。 [...]注意:此状态码类似于
301
(永久移动), 除了它不允许从POST
到GET
。
查看answer了解更多详情。
【讨论】:
不错。不幸的是,当前使用的库 (com.squareup.retrofit2:retrofit:2.1.0) 不支持此代码。而且因为我需要为不升级的现有客户提供解决方案,所以我无法更改库。 @LeosLiterak 好吧,你可以试试307
(Temporary Redirect)。以上是关于永久移动 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章