簡體   English   中英

如何在HTTP響應中設置標頭?

[英]How to set a header in an HTTP response?

我有一個servlet A ,我在HTTP響應中設置一個標頭:

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String userName=request.getParameter("userName");
    String newUrl = "http://somehost:port/ServletB";

    response.addHeader("REMOTE_USER", userName);

    response.sendRedirect(newUrl);
}

現在在servlet B中 ,我試圖獲取在servlet A中設置的頭值:

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String userid = request.getHeader("REMOTE_USER");
}


但是這里userid的值是null 請讓我知道我在這里缺少什么。

首先,你必須了解其本質

response.sendRedirect(newUrl);

它通過URL給客戶端(瀏覽器)302 http代碼響應。 然后,瀏覽器在該URL上發出單獨的GET請求。 並且該請求在第一個請求中不知道標題。

因此,如果需要將標頭從Servlet A傳遞到Servlet B,sendRedirect將不起作用。

如果您希望此代碼有效 - 請在Servlet A中使用RequestDispatcher(而不是sendRedirect)。 此外,使用相對路徑總是更好。

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
    String userName=request.getParameter("userName");
    String newUrl = "ServletB";
    response.addHeader("REMOTE_USER", userName);
    RequestDispatcher view = request.getRequestDispatcher(newUrl);
    view.forward(request, response);
}

========================

public void doPost(HttpServletRequest request, HttpServletResponse response)
{
    String sss = response.getHeader("REMOTE_USER");
}

在我的Controller中,我只是添加了一個HttpServletResponse參數並手動添加了標題,不需要過濾器或攔截,它工作正常:

httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS");
httpServletResponse.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token, X-Csrf-Token, WWW-Authenticate, Authorization");
httpServletResponse.setHeader("Access-Control-Allow-Credentials", "false");
httpServletResponse.setHeader("Access-Control-Max-Age", "3600");

標題字段不會復制到后續請求。 您應該使用cookie(addCookie方法)或在會話中存儲“REMOTE_USER”(可以使用getSession方法獲取)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM