English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
브라우저가 웹 페이지를 요청할 때, 그는 웹 서버에게 특정 정보를 보내지만, 이 정보는 직접 읽을 수 없습니다.因为这些信息是作为 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 | 이 헤더 정보는 요청을 보낸 브라우저나 다른 클라이언트를 인식하고, 다른 유형의 브라우저에 다른 내용을 반환할 수 있습니다. |
Servlet 프로그램에서 HTTP 헤더를 읽는 데 사용할 수 있는 다음의 메서드가 있습니다. 이 메서드들은 HttpServletRequest 객체 사용 가능
순번 | 메서드 & 설명 |
---|---|
1 | Cookie[] getCookies() 클라이언트가 이 요청을 보낸 모든 Cookie 객체를 포함하는 배열을 반환합니다. |
2 | Enumeration getAttributeNames() 요청에 제공된 사용 가능한 속성 이름을 포함하는 열거를 반환합니다. |
3 | Enumeration getHeaderNames() 요청에 포함된 모든 헤더 이름을 포함하는 열거를 반환합니다. |
4 | Enumeration getParameterNames() 요청에 포함된 매개변수 이름을 포함하는 String 객체의 열거를 반환합니다. |
5 | HttpSession getSession() 현재 세션과 관련된 session 세션을 반환하거나, 요청에 세션이 없으면 하나를 생성합니다. |
6 | HttpSession getSession(boolean create) 현재 세션과 관련된 HttpSession을 반환하거나, 현재 세션이 없고 생성이 참이면 새로운 session 세션을 반환합니다. |
7 | Locale getLocale() Accept을 기반으로 합니다.-Language 헤더, 클라이언트가 내용을 받을 때 선호하는 지역 설정을 반환합니다. |
8 | Object getAttribute(String name) 이름이 주어진 속성의 값을 객체 형태로 반환합니다. 주어진 이름의 속성이 존재하지 않으면 null을 반환합니다. |
9 | ServletInputStream getInputStream() ServletInputStream을 사용하여 요청 본문을 이진 데이터 형태로 검색합니다. |
10 | String getAuthType() Servlet을 보호하는 인증 기법의 이름을 반환합니다. 예를 들어, "BASIC" 또는 "SSL", JSP가 보호되지 않으면 null을 반환합니다. |
11 | String getCharacterEncoding() 요청 본문에서 사용하는 문자编码의 이름을 반환합니다. |
12 | String getContentType() 요청 본문의 MIME 타입을 반환합니다. 타입을 알 수 없으면 null을 반환합니다. |
13 | String getContextPath() 요청 상태의 요청 URI 부분을 반환합니다. |
14 | String getHeader(String name) 지정된 요청 헤더의 값을 문자열 형태로 반환합니다. |
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() 사용자가 인증되었으면 요청을 보낸 로그인 사용자를 반환하거나, 인증되지 않았으면 null을 반환합니다. |
23 | String getRequestURI() 협의서 이름에서 HTTP 요청의 첫 번째 행의 쿼리 문자열까지, 해당 요청의 URL의 일부를 반환합니다. |
24 | String getRequestedSessionId() 返回由客户端指定的 session 会话 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() 返回接收到这个请求的端口号。 |
31 | int getParameterMap() 将参数封装成 Map 类型。 |
下面的示例使用 HttpServletRequest 的 getHeaderNames() 方法读取 HTTP 头信息。该方法返回一个枚举,包含与当前的 HTTP 请求相关的头信息。
一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称。
//导入必需的 java 库 import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("}}/DisplayHeader") //扩展 HttpServlet 类 public class DisplayHeader extends HttpServlet { // 处理 GET 方法请求的方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "HTTP Header 请求示例 - 基础教程网示例"; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><meta charset=\"utf-8\"><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(); <tr><td> + + "</td>\n String paramValue = request.getHeader(paramName); <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); } }
이 테스트 예제는 TomcatTest 프로젝트 아래에 위치하고, 해당 web.xml 설정은 다음과 같습니다:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet <!-- 클래스 이름 --> <servlet-name>DisplayHeader</servlet-name> <!-- 의 패키지 --> <servlet-class>com.w3codebox.test.DisplayHeader</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayHeader</servlet-name> <!-- 방문한 웹사이트 --> <url-pattern>/TomcatTest/DisplayHeader</url-pattern> </servlet-mapping> </web-app>
지금, 위의 Servlet을 호출하여 다음을 방문하십시오: http://localhost:8080/TomcatTest/DisplayHeader 다음과 같은 결과가 발생할 것입니다: