Requête HTTP du client servlet


Lorsqu'un navigateur demande une page Web, il envoie certaines informations au serveur Web, qui ne peuvent pas être lues directement car elles sont transmises dans le cadre des en-têtes de la requête HTTP. Vous pouvez consulter le protocole HTTP pour plus d'informations.

Ce qui suit sont des informations d'en-tête importantes du côté du navigateur, que vous pouvez utiliser fréquemment dans la programmation Web :

头信息描述
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这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。

Méthodes pour lire les en-têtes HTTP

Les méthodes suivantes peuvent être utilisées pour lire les en-têtes HTTP dans les programmes Servlet. Ces méthodes sont disponibles via l'objet HttpServletRequest.

Numéro de sérieMéthode et description
1Cookie[] getCookies( )
Renvoie un tableau contenant tous les objets Cookie envoyés par le client pour cette requête.
2Enumeration getAttributeNames()
Renvoie une énumération contenant les noms d'attributs disponibles pour cette requête.
3Enumeration getHeaderNames()
Renvoie une énumération contenant tous les noms d'en-tête inclus dans cette requête.
4Enumeration getParameterNames()
Renvoie une énumération d'objets String contenant les noms des paramètres inclus dans cette requête .
5HttpSession getSession()
Renvoie la session en cours associée à cette requête, ou si la requête n'a pas de session , puis créez-en un.
6HttpSession getSession(boolean create)
Renvoie la HttpSession actuelle associée à cette requête, ou s'il n'y a pas de session en cours , et si create est vrai, une nouvelle session est renvoyée.
7Locale getLocale()
Basé sur l'en-tête Accept-Language, renvoie les paramètres régionaux préférés du client pour accepter le contenu.
8Object getAttribute(String name)
Renvoie la valeur de l'attribut nommé en tant qu'objet, s'il n'y a personne avec le nom donné Si l'attribut existe, null est renvoyé.
9ServletInputStream getInputStream()
À l'aide d'un ServletInputStream, récupérez le corps de la requête sous forme de données binaires.
10String getAuthType()
Renvoie le nom du schéma d'authentification utilisé pour protéger le servlet, par exemple, "BASIC " ou " SSL ", ou null si le JSP n'est pas protégé.
11String getCharacterEncoding()
Renvoie le nom de l'encodage de caractères utilisé dans le corps de la requête.
12String getContentType()
Renvoie le type MIME du corps de la requête, ou null si le type n'est pas connu.
13String getContextPath()
Renvoie la partie de l'URI de la requête qui indique le contexte de la requête.
14String getHeader(String name)
Renvoie la valeur de l'en-tête de requête spécifié sous forme de chaîne.
15String getMethod()
Renvoie le nom de la méthode HTTP demandée, par exemple, GET, POST ou PUT .
16String getParameter(String name)
Renvoie la valeur du paramètre de requête sous forme de chaîne, ou si le paramètre le fait n'existe pas Renvoie null.
17String getPathInfo()
Lorsque la demande est effectuée, renvoie tous les chemins supplémentaires associés à l'URL envoyée par le client information.
18String getProtocol()
Renvoie le nom et la version du protocole demandé.
19String getQueryString()
Renvoie la chaîne de requête contenue dans l'URL de la requête après le chemin.
20String getRemoteAddr()
Renvoie l'adresse de protocole Internet (IP) du client qui envoie la demande.
21String getRemoteHost()
Renvoie le nom complet du client qui a envoyé la demande.
22String getRemoteUser()
Renvoie l'utilisateur connecté qui a fait la demande si l'utilisateur est authentifié, ou si le user Si l'authentification n'est pas réussie, null est renvoyé.
23String getRequestURI()
Renvoie la chaîne de requête depuis le nom du protocole jusqu'à la première ligne de la requête HTTP. Partie de l'URL demandée.
24String getRequestedSessionId()
Renvoie l'ID de session spécifié par le client.
25String getServletPath()
Renvoie une partie de l'URL de la requête qui a appelé la JSP.
26String[] getParameterValues(String name)
Renvoie un tableau d'objets chaîne contenant toutes les requêtes données La valeur de le paramètre, ou null si le paramètre n’existe pas.
27boolean isSecure()
Renvoie une valeur booléenne indiquant si la requête utilise un canal sécurisé, tel que HTTPS.
28int getContentLength()
Renvoie la longueur du corps de la requête en octets et fournit un flux d'entrée, ou si If la longueur est inconnue, -1 est renvoyé.
29int getIntHeader(String name)
Renvoie la valeur de l'en-tête de requête spécifié sous forme de valeur int.
30int getServerPort()
Renvoie le numéro de port où cette demande a été reçue.

Exemple de demande d'en-tête HTTP

L'exemple suivant utilise la méthode getHeaderNames() de HttpServletRequest pour lire les informations d'en-tête HTTP. Cette méthode renvoie une énumération contenant des informations d'en-tête liées à la requête HTTP actuelle.

Une fois que nous avons une énumération, nous pouvons parcourir l'énumération de la manière standard, en utilisant la méthode hasMoreElements() pour déterminer quand arrêter, en utilisant la nextElement() méthode pour obtenir le nom de chaque paramètre.

// 导入必需的 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);
  }
}

Maintenant, l'appel du servlet ci-dessus produira les résultats suivants :

Exemple de demande d'en-tête 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