如何在Java头文件中重定向请求的同时在HTTP头文件中传递数据

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

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

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

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

所以,我的问题是,

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

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

请注意:其他方式很少,例如

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

要么

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

不是我所期待的。

提问于
用户回答回答于

您设置的标题将写入发送给客户端的响应,以及位置标题和状态码。请参阅使用servlet重定向请求并且“setHeader”方法不起作用

然后,客户端应该向您在Location标头中指定的URL发送相同的请求。与发送给您的请求完全相同。

您希望浏览器发送您指定的标题以及重定向的请求。你有没有考虑添加一个(域)Cookie头?一些谷歌搜索引导我相信,在重定向响应中设置的Cookie将被大多数浏览器所接受。请参阅http://blog.dubbelboer.com/2012/11/25/302-cookie.html

用户回答回答于

请看看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());

扫码关注云+社区