서블릿 클라이언트 HTTP 요청


브라우저가 웹페이지를 요청할 때 특정 정보를 웹 서버로 전송하는데, 이 정보는 HTTP 요청 헤더의 일부로 전송되기 때문에 직접 읽을 수 없습니다. 자세한 내용은 HTTP 프로토콜을 확인하세요.

다음은 웹 프로그래밍에서 자주 사용할 수 있는 브라우저 측의 중요한 헤더 정보입니다.

头信息描述
Accept这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/pngimage/jpeg 是最常见的两种可能值。
Accept-Charset这个头信息指定浏览器可以用来显示信息的字符集。例如 ISO-8859-1。
Accept-Encoding这个头信息指定浏览器知道如何处理的编码类型。值 gzipcompress 是最常见的两种可能值。
Accept-Language这个头信息指定客户端的首选语言,在这种情况下,Servlet 会产生多种语言的结果。例如,en、en-us、ru 等。
Authorization这个头信息用于客户端在访问受密码保护的网页时识别自己的身份。
Connection这个头信息指示客户端是否可以处理持久 HTTP 连接。持久连接允许客户端或其他浏览器通过单个请求来检索多个文件。值 Keep-Alive 意味着使用了持续连接。
Content-Length这个头信息只适用于 POST 请求,并给出 POST 数据的大小(以字节为单位)。
Cookie这个头信息把之前发送到浏览器的 cookies 返回到服务器。
Host这个头信息指定原始的 URL 中的主机和端口。
If-Modified-Since这个头信息表示只有当页面在指定的日期后已更改时,客户端想要的页面。如果没有新的结果可以使用,服务器会发送一个 304 代码,表示 Not Modified 头信息。
If-Unmodified-Since这个头信息是 If-Modified-Since 的对立面,它指定只有当文档早于指定日期时,操作才会成功。
Referer这个头信息指示所指向的 Web 页的 URL。例如,如果您在网页 1,点击一个链接到网页 2,当浏览器请求网页 2 时,网页 1 的 URL 就会包含在 Referer 头信息中。
User-Agent这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。

HTTP 헤더를 읽는 방법

서블릿 프로그램에서 HTTP 헤더를 읽는 방법은 다음과 같습니다. 이러한 메소드는 HttpServletRequest 객체를 통해 사용할 수 있습니다.

일련번호방법 및 설명
1쿠키[] getCookies( )
이 요청에 대해 클라이언트가 보낸 모든 Cookie 개체가 포함된 배열을 반환합니다.
2Enumeration getAttributeNames()
이 요청에 사용할 수 있는 속성 이름이 포함된 열거형을 반환합니다.
3열거 getHeaderNames()
이 요청에 포함된 모든 헤더 이름이 포함된 열거를 반환합니다.
4Enumeration getParameterNames()
이 요청에 포함된 매개변수의 이름이 포함된 String 객체의 열거형을 반환합니다.
5HttpSession getSession()
이 요청과 관련된 현재 세션을 반환하거나 요청에 세션이 없는 경우 을 선택한 다음 하나를 생성하세요.
6HttpSession getSession(boolean create)
이 요청과 관련된 현재 HttpSession을 반환하거나 현재 세션이 없는 경우 반환합니다. , create가 true이면 새 세션이 반환됩니다.
7Locale getLocale()
Accept-Language 헤더를 기반으로 콘텐츠 허용을 위해 클라이언트가 선호하는 로케일을 반환합니다.
8Object getAttribute(String name)
아무도 없는 경우 명명된 속성의 값을 객체로 반환합니다. 주어진 이름으로 속성이 존재하면 null이 반환됩니다.
9ServletInputStream getInputStream()
ServletInputStream을 사용하여 요청 본문을 바이너리 데이터로 검색합니다.
10String getAuthType()
서블릿을 보호하는 데 사용되는 인증 체계의 이름을 반환합니다(예: "BASIC) " 또는 "SSL"이거나, JSP가 보호되지 않는 경우 null입니다.
11String getCharacterEncoding()
요청 본문에 사용된 문자 인코딩의 이름을 반환합니다.
12String getContentType()
요청 본문의 MIME 유형을 반환하거나, 유형을 알 수 없는 경우 null을 반환합니다.
13String getContextPath()
요청 컨텍스트를 나타내는 요청 URI 부분을 반환합니다.
14String getHeader(문자열 이름)
지정된 요청 헤더의 값을 문자열 형식으로 반환합니다.
15String getMethod()
요청된 HTTP 메소드의 이름을 반환합니다(예: GET, POST 또는 PUT). .
16String getParameter(String name)
요청 매개변수의 값을 문자열로 반환하거나 매개변수가 존재하지 않음 null을 반환합니다.
17String getPathInfo()
요청이 이루어지면 클라이언트가 보낸 URL과 관련된 추가 경로를 반환합니다. 정보.
18String getProtocol()
요청된 프로토콜의 이름과 버전을 반환합니다.
19String getQueryString()
경로 뒤의 요청 URL에 포함된 쿼리 문자열을 반환합니다.
20String getRemoteAddr()
요청을 보내는 클라이언트의 인터넷 프로토콜(IP) 주소를 반환합니다.
21String getRemoteHost()
요청을 보낸 클라이언트의 정규화된 이름을 반환합니다.
22String getRemoteUser()
사용자가 인증되었거나 user 인증이 통과되지 않으면 null이 반환됩니다.
23String getRequestURI()
HTTP 요청의 첫 번째 줄까지 프로토콜 이름에서 쿼리 문자열을 반환합니다. 요청한 URL.
24String getRequestedSessionId()
클라이언트가 지정한 세션 세션 ID를 반환합니다.
25String getServletPath()
JSP를 호출한 요청의 URL 일부를 반환합니다.
26String[] getParameterValues(String name)
주어진 요청을 모두 포함하는 문자열 객체의 배열을 반환합니다. 매개변수입니다. 매개변수가 없으면 null입니다.
27boolean isSecure()
요청이 HTTPS와 같은 보안 채널을 사용하는지 여부를 나타내는 부울 값을 반환합니다.
28int getContentLength()
요청 본문의 길이를 바이트 단위로 반환하고 입력 스트림을 제공합니다. 길이를 알 수 없으면 -1이 반환됩니다.
29int getIntHeader(String name)
지정된 요청 헤더의 값을 int 값으로 반환합니다.
30int getServerPort()
이 요청이 수신된 포트 번호를 반환합니다.

HTTP 헤더 요청 예

다음 예에서는 HttpServletRequest의 getHeaderNames() 메서드를 사용하여 HTTP 헤더 정보를 읽습니다. 이 메서드는 현재 HTTP 요청과 관련된 헤더 정보가 포함된 열거형을 반환합니다.

열거형이 있으면 hasMoreElements() 메서드를 사용하여 중지 시점을 결정하고 nextElement()<를 사용하여 표준 방식으로 열거형을 반복할 수 있습니다. 🎜> 각 매개변수의 이름을 가져오는 방법입니다.

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// 扩展 HttpServlet 类
public class DisplayHeader extends HttpServlet {
 
  // 处理 GET 方法请求的方法
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
	  String title = "HTTP Header 请求实例";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\n";
      out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n"+
        "<body bgcolor=\"#f0f0f0\">\n" +
        "<h1 align=\"center\">" + title + "</h1>\n" +
        "<table width=\"100%\" border=\"1\" align=\"center\">\n" +
        "<tr bgcolor=\"#949494\">\n" +
        "<th>Header 名称</th><th>Header 值</th>\n"+
        "</tr>\n");
 
      Enumeration headerNames = request.getHeaderNames();
      
      while(headerNames.hasMoreElements()) {
         String paramName = (String)headerNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n");
         String paramValue = request.getHeader(paramName);
         out.println("<td> " + paramValue + "</td></tr>\n");
      }
      out.println("</table>\n</body></html>");
  }
  // 处理 POST 方法请求的方法
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

이제 위 서블릿을 호출하면 다음과 같은 결과가 생성됩니다.

HTTP 헤더 요청 예

Header 名称Header 值
accept*/*
accept-languageen-us
user-agentMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encodinggzip, deflate
hostlocalhost:8080
connectionKeep-Alive
cache-controlno-cache