可以将 POST 请求重定向为另一个 GET 请求吗

Posted

技术标签:

【中文标题】可以将 POST 请求重定向为另一个 GET 请求吗【英文标题】:Can a POST request be redirected as another GET request 【发布时间】:2021-05-11 20:27:46 【问题描述】:

我正在开发一个反应应用程序,由于机密性,需要在主体内发送对象参数。所以我正在像这样从反应应用程序客户端向后端服务器发出 POST 请求

axios
  .post('htps://java.backend.xyz/path1', 
    data: password,
  )
  .catch(function (error) 
    handle(error);
  );

发出此 POST 请求后,有一个带有“method = OPTIONS”和“URL='htps://java.backend.xyz/path1'”的预检请求... java-backend-server 以 status_code 响应该请求=200。

在上述预检请求之后,java-backend-server 处理 POST 请求,而不是发送响应,java-backend-server 使用 GET 请求(即重定向)进行响应,例如:

https://express-app.xyz/path2?query_para1=abc&query_param2=123, requestMethod=GET

为了响应上面的 GET 请求,express 应用响应 status_code=200

但是在这个 GET 请求之后,有一个带有请求 Method=OPTIONS 并且具有与上面相同的 URL 的预检请求,即

https://express-app.xyz/path2?query_para1=abc&query_param2=123, requestMethod=OPTIONS

对于上面的 OPTIONS 请求,快递服务器以 status_code=204 响应,这意味着客户端不需要离开其当前页面...这是禁止我的应用程序进行最终重定向的原因,即在后端服务器响应 GET 请求,即使搜索引擎没有更新重定向 URL,我的 react 应用也无法进行重定向

https://express-app.xyz/path2?query_para1=abc&query_param2=123

那么,这甚至可能吗?我假设 GET 请求之后的预检请求禁止客户端进行最终重定向。有人可以帮我解决这个问题

【问题讨论】:

这甚至可以在不期望响应的情况下发送 POST 请求吗?请帮忙 如果没有人可以在这里向我建议我应该使用哪种请求方法而不是 POST,实际上需要在正文中发送凭据,而不是期望任何响应。在响应中,我期望重定向 【参考方案1】:

我不确定我是否正确理解了您的问题,但您可以做的是发送一个帖子响应,这将指示客户重定向到特定位置。 这可以通过发送带有状态码 302 的响应和标头中的位置 (location:redirect_url) 来实现

更多信息:- https://en.m.wikipedia.org/wiki/HTTP_302

【讨论】:

这也可以帮助你:- ***.com/questions/46582/… 感谢@A.Shenoy 的回复,是否可以在不期望回复的情况下发送 POST 请求 ``` axios .post('htps://java.backend.xyz/path1', 数据:密码,) .catch(function (error) handle(error); ); ``` 发布请求将发送响应,但您可以选择在您的情况下忽略它,因为 axios 调用是异步的,您可以选择不等待响应,也可以在响应到达 axios 时不处理它。 post('htps://java.backend.xyz/path1', data: password, ).then(response=>) .catch(function (error) handle(error); ) 我在发送 post 请求并期望服务器重定向后无法重定向...此重定向没有发生,因为我正在为最终重定向获取标头 origin: null 这种场景很容易重现,因为任何人都可以拥有一个 express js 服务器 POST 端点,作为响应重定向为 res.redirect(302, finalRedirectUrl) 并从客户端调用此 POST 端点。服务器 POST 端点最终无法重定向

以上是关于可以将 POST 请求重定向为另一个 GET 请求吗的主要内容,如果未能解决你的问题,请参考以下文章

httpclient 中post请求重定向

Servlet重定向和请求转发

在 spring 控制器的重定向中将请求方法从 POST 更改为 GET

JMeter 在 GET 方法上遵循 POST 重定向

将 POST 请求从一个 REST API 转发/重定向到另一个

AFNetworking 将重定向请求从 GET 更改为 POST