首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中重定向请求时在HTTP头中传递数据

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

Stack Overflow用户
提问于 2014-06-12 16:06:45
回答 5查看 63.8K关注 0票数 19

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

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

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

所以,我的问题是,

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

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

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

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

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

不是我想要的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-19 06:55:03

您设置的标头将写入发送到客户端的响应,以及位置标头和状态代码。请参阅Redirecting a request using servlets and the "setHeader" method not working

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

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

票数 11
EN

Stack Overflow用户

发布于 2014-06-24 23:45:05

请看一下Apache HttpClient

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

代码语言:javascript
复制
    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());
票数 2
EN

Stack Overflow用户

发布于 2018-09-17 10:13:30

问题是responseredirect()方法完全启动了一个新请求,从而丢失了在重定向之前设置的属性。幸运的是,仍然有一种流畅的方法来解决这个问题。

代码语言:javascript
复制
response.setHeader("Key", "Value");
request.getRequestDispatcher("redirecturl").forward(request, response);

然后在你的目的地,你可以做

代码语言:javascript
复制
response.getHeaders("key")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24179361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档