如何在 Java 中重定向请求时在 HTTP 标头中传递数据

是否可以在HTTP Header中传递一些数据,同时将请求从一台服务器重定向到另一台服务器。

这是我的场景,我有一个通用过滤器,每个请求都通过它传递。现在,基于某些条件,我使用API将请求重定向到一些不同的服务器。objHttpServletResponse.sendRedirect(strURL)

但是,问题是,当我在响应标头中设置一些数据时,例如重定向的服务器中不可用。objHttpServletResponse.setHeader("Key", "Value");

所以,我的问题是,

1. 有没有办法在重定向请求时在标头中传递一些数据?

2. 如果没有,在重定向请求时发送一些数据的其他可能方法是什么?

请注意:其他几种方式,如

使用网址参数: objHttpServletResponse.sendRedirect(strURL+"?param="+ strParamValue);

使用会话: HttpSession session = httpRequest.getSession(); session.setAttribute("Key", "Value");

不是我所期望的。


答案 1

您设置的标头将与 Location 标头和状态代码一起写入发送到客户端的响应中。请参阅使用 servlet 重定向请求和“setHeader”方法不起作用

然后,客户端应向您在位置标头中指定的 URL 发送相同的请求。与它发送给您的请求相同。

您希望浏览器发送您指定的标头以及重定向的请求。您是否考虑过添加(域)Cookie 标头?一些谷歌搜索使我相信重定向响应中设置的cookie将被大多数浏览器拾取。查看 http://blog.dubbelboer.com/2012/11/25/302-cookie.html


答案 2

请看一下Apache HttpClient

此示例向 post 请求添加几个参数:

    String url = "https://selfsolve.apple.com/wcResults.do";

    HttpClient client = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost(url);

    // add header
    post.setHeader("User-Agent", USER_AGENT);

    List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("sn", "C02G8416DRJM"));
    urlParameters.add(new BasicNameValuePair("cn", ""));
    urlParameters.add(new BasicNameValuePair("locale", ""));
    urlParameters.add(new BasicNameValuePair("caller", ""));
    urlParameters.add(new BasicNameValuePair("num", "12345"));

    post.setEntity(new UrlEncodedFormEntity(urlParameters));

    HttpResponse response = client.execute(post);
    System.out.println("Response Code : " 
                + response.getStatusLine().getStatusCode());

推荐