【问题标题】:Server endpoint calling address and redirecting address returning different ip address服务器端点调用地址和重定向地址返回不同的 ip 地址
【发布时间】:2019-10-22 19:22:50
【问题描述】:

我有两台不同域的服务器。

服务器 2:IP 地址为200.200.200.200 (twohundred.com)

服务器 1:IP 地址为100.100.100.100 (onehundred.com)

我正在从 server2 向 server1 发出一个休息 API 请求。在 server1 中,我有一个名为 /validate 的 java 端点。从这个端点,我向同一服务器中托管的 /verify 端点发出请求。

@RequestMapping(value = "/validate", method = { RequestMethod.POST })
public String validateAndRedirect(HttpServletRequest request, 
    HttpServletResponse response) throws JSONException, IOException {
    Url url = "https://onehundred.com/verify?queryParam=123";
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("POST");
    con.setDoOutput(true);

    response.sendRedirect("https://onehundred.com/successful/message");
}

如果请求从浏览器发送到 /verify 端点,如果我重定向到 /validate,是否可以从服务器地址重定向。

【问题讨论】:

  • 您是否尝试在处理请求时询问您是否想知道请求者的 IP 地址?
  • @Sunil Kanzar,我在问,当我执行 sendRedirect 时,请求会转到 /successful 端点。在成功的端点中,请求来自服务器 2 的 IP 地址 (200.200..*),即使 response.sendRedirect 所在的代码托管在服务器 1(100.100.100.100) 中。因此,/successful 端点应该接收来自 server1 而不是来自 server2 的请求。
  • 如果在 server 1 托管的 https://onehundred.com/successful/message 上请求并期望它通过 server 1 它自己调用,我不会问你问题。
  • 我的意思是说,如果您是从server 1 拨打电话到server 1 它自己,那么您怎么能指望它来自server 2
  • 这就是我的意思,在成功的端点中,请求来自服务器 2,即使 sendredirect 代码物理存储在 server1 中并在 server1 中运行。因此,/successful 端点应该接收来自 server1 的请求,但查看日志,请求实际上来自 /server2 (200.200.200.200)

标签: java spring-boot redirect networking server


【解决方案1】:

这是因为sendRedirect 会向客户端发送重定向代码,而客户端会再次向服务器发起 http 调用。

因此,如果您想要实际的服务器 IP,则必须从 server 1 它自己进行 HTTP 调用。

要解决此问题,只需对 https://onehundred.com/successful 执行与 https://onehundred.com/verify?queryParam=123 API 相同的操作,并解析成功 API 的响应并将其显示在当前 API(/validate) 中。

在这种情况下,server 1 发出的请求不会向客户端发送重定向请求。

对不起英语

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 2011-04-29
    • 2013-09-14
    • 2017-12-14
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多