서블릿 클라이언트 HTTP 요청
브라우저가 웹페이지를 요청할 때 특정 정보를 웹 서버로 전송하는데, 이 정보는 HTTP 요청 헤더의 일부로 전송되기 때문에 직접 읽을 수 없습니다. 자세한 내용은 HTTP 프로토콜을 확인하세요.
다음은 웹 프로그래밍에서 자주 사용할 수 있는 브라우저 측의 중요한 헤더 정보입니다.
头信息 | 描述 |
---|---|
Accept | 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常见的两种可能值。 |
Accept-Charset | 这个头信息指定浏览器可以用来显示信息的字符集。例如 ISO-8859-1。 |
Accept-Encoding | 这个头信息指定浏览器知道如何处理的编码类型。值 gzip 或 compress 是最常见的两种可能值。 |
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 개체가 포함된 배열을 반환합니다. |
2 | Enumeration getAttributeNames() 이 요청에 사용할 수 있는 속성 이름이 포함된 열거형을 반환합니다. |
3 | 열거 getHeaderNames() 이 요청에 포함된 모든 헤더 이름이 포함된 열거를 반환합니다. |
4 | Enumeration getParameterNames() 이 요청에 포함된 매개변수의 이름이 포함된 String 객체의 열거형을 반환합니다. |
5 | HttpSession getSession() 이 요청과 관련된 현재 세션을 반환하거나 요청에 세션이 없는 경우 을 선택한 다음 하나를 생성하세요. |
6 | HttpSession getSession(boolean create) 이 요청과 관련된 현재 HttpSession을 반환하거나 현재 세션이 없는 경우 반환합니다. , create가 true이면 새 세션이 반환됩니다. |
7 | Locale getLocale() Accept-Language 헤더를 기반으로 콘텐츠 허용을 위해 클라이언트가 선호하는 로케일을 반환합니다. |
8 | Object getAttribute(String name) 아무도 없는 경우 명명된 속성의 값을 객체로 반환합니다. 주어진 이름으로 속성이 존재하면 null이 반환됩니다. |
9 | ServletInputStream getInputStream() ServletInputStream을 사용하여 요청 본문을 바이너리 데이터로 검색합니다. |
10 | String getAuthType() 서블릿을 보호하는 데 사용되는 인증 체계의 이름을 반환합니다(예: "BASIC) " 또는 "SSL"이거나, JSP가 보호되지 않는 경우 null입니다. |
11 | String getCharacterEncoding() 요청 본문에 사용된 문자 인코딩의 이름을 반환합니다. |
12 | String getContentType() 요청 본문의 MIME 유형을 반환하거나, 유형을 알 수 없는 경우 null을 반환합니다. |
13 | String getContextPath() 요청 컨텍스트를 나타내는 요청 URI 부분을 반환합니다. |
14 | String getHeader(문자열 이름) 지정된 요청 헤더의 값을 문자열 형식으로 반환합니다. |
15 | String getMethod() 요청된 HTTP 메소드의 이름을 반환합니다(예: GET, POST 또는 PUT). . |
16 | String getParameter(String name) 요청 매개변수의 값을 문자열로 반환하거나 매개변수가 존재하지 않음 null을 반환합니다. |
17 | String getPathInfo() 요청이 이루어지면 클라이언트가 보낸 URL과 관련된 추가 경로를 반환합니다. 정보. |
18 | String getProtocol() 요청된 프로토콜의 이름과 버전을 반환합니다. |
19 | String getQueryString() 경로 뒤의 요청 URL에 포함된 쿼리 문자열을 반환합니다. |
20 | String getRemoteAddr() 요청을 보내는 클라이언트의 인터넷 프로토콜(IP) 주소를 반환합니다. |
21 | String getRemoteHost() 요청을 보낸 클라이언트의 정규화된 이름을 반환합니다. |
22 | String getRemoteUser() 사용자가 인증되었거나 user 인증이 통과되지 않으면 null이 반환됩니다. |
23 | String getRequestURI() HTTP 요청의 첫 번째 줄까지 프로토콜 이름에서 쿼리 문자열을 반환합니다. 요청한 URL. |
24 | String getRequestedSessionId() 클라이언트가 지정한 세션 세션 ID를 반환합니다. |
25 | String getServletPath() JSP를 호출한 요청의 URL 일부를 반환합니다. |
26 | String[] getParameterValues(String name) 주어진 요청을 모두 포함하는 문자열 객체의 배열을 반환합니다. 매개변수입니다. 매개변수가 없으면 null입니다. |
27 | boolean isSecure() 요청이 HTTPS와 같은 보안 채널을 사용하는지 여부를 나타내는 부울 값을 반환합니다. |
28 | int getContentLength() 요청 본문의 길이를 바이트 단위로 반환하고 입력 스트림을 제공합니다. 길이를 알 수 없으면 -1이 반환됩니다. |
29 | int getIntHeader(String name) 지정된 요청 헤더의 값을 int 값으로 반환합니다. |
30 | int 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-language | en-us |
user-agent | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) |
accept-encoding | gzip, deflate |
host | localhost:8080 |
connection | Keep-Alive |
cache-control | no-cache |