Permintaan HTTP klien Servlet


Apabila penyemak imbas meminta halaman web, ia menghantar maklumat tertentu ke pelayan web, yang tidak boleh dibaca secara langsung kerana ia dihantar sebagai sebahagian daripada pengepala permintaan HTTP. Anda boleh menyemak protokol HTTP untuk mendapatkan maklumat lanjut.

Berikut ialah maklumat pengepala penting dari sisi penyemak imbas, yang boleh anda gunakan dengan kerap dalam pengaturcaraan 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这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。

Kaedah untuk membaca pengepala HTTP

Kaedah berikut boleh digunakan untuk membaca pengepala HTTP dalam program Servlet. Kaedah ini tersedia melalui objek HttpServletRequest.

Nombor siriKaedah & Penerangan
1Kuki[] getCookies( )
Mengembalikan tatasusunan yang mengandungi semua objek Kuki yang dihantar oleh klien untuk permintaan ini.
2Enumeration getAttributeNames()
Mengembalikan penghitungan yang mengandungi nama atribut yang tersedia untuk permintaan ini.
3Enumeration getHeaderNames()
Mengembalikan penghitungan yang mengandungi semua nama pengepala yang disertakan dalam permintaan ini.
4Enumeration getParameterNames()
Mengembalikan penghitungan objek String yang mengandungi nama parameter yang disertakan dalam permintaan ini .
5HttpSession getSession()
Mengembalikan sesi semasa yang dikaitkan dengan permintaan ini, atau jika permintaan itu tidak mempunyai sesi , kemudian Buat satu.
6HttpSession getSession(boolean create)
Mengembalikan HttpSession semasa yang dikaitkan dengan permintaan ini atau jika tiada sesi semasa , dan Jika cipta adalah benar, sesi baharu dikembalikan.
7Locale getLocale()
Berdasarkan pengepala Accept-Language, mengembalikan tempat pilihan pelanggan untuk menerima kandungan.
8Object getAttribute(String name)
Mengembalikan nilai atribut bernama sebagai objek, jika tiada siapa dengan nama yang diberikan Jika atribut wujud, null dikembalikan.
9ServletInputStream getInputStream()
Menggunakan ServletInputStream, dapatkan semula kandungan permintaan sebagai data binari.
10String getAuthType()
Mengembalikan nama skim pengesahan yang digunakan untuk melindungi Servlet, contohnya, "BASIC " atau "SSL", atau batal jika JSP tidak dilindungi.
11String getCharacterEncoding()
Mengembalikan nama pengekodan aksara yang digunakan dalam badan permintaan.
12String getContentType()
Mengembalikan jenis MIME badan permintaan, atau batal jika jenisnya tidak diketahui.
13String getContextPath()
Mengembalikan bahagian URI permintaan yang menunjukkan konteks permintaan.
14String getHeader(String name)
Mengembalikan nilai pengepala permintaan yang ditentukan dalam bentuk rentetan.
15String getMethod()
Mengembalikan nama kaedah HTTP yang diminta, contohnya, GET, POST atau PUT .
16String getParameter(String name)
Mengembalikan nilai parameter permintaan sebagai rentetan, atau jika parameter itu tidak wujud Kembali null.
17String getPathInfo()
Apabila permintaan dibuat, kembalikan sebarang laluan tambahan yang dikaitkan dengan URL yang dihantar oleh klien maklumat.
18String getProtocol()
Mengembalikan nama dan versi protokol yang diminta.
19String getQueryString()
Mengembalikan rentetan pertanyaan yang terkandung dalam URL permintaan selepas laluan.
20String getRemoteAddr()
Mengembalikan alamat Internet Protocol (IP) pelanggan yang menghantar permintaan.
21String getRemoteHost()
Mengembalikan nama pelanggan yang layak sepenuhnya yang menghantar permintaan.
22String getRemoteUser()
Mengembalikan pengguna log masuk yang membuat permintaan jika pengguna disahkan, atau jika pengguna Jika pengesahan tidak diluluskan, null dikembalikan.
23String getRequestURI()
Mengembalikan rentetan pertanyaan daripada nama protokol sehingga baris pertama permintaan HTTP Sebahagian daripada URL yang diminta.
24String getRequestedSessionId()
Mengembalikan ID sesi sesi yang ditentukan oleh pelanggan.
25String getServletPath()
Mengembalikan sebahagian daripada URL permintaan yang dipanggil JSP.
26String[] getParameterValues(String name)
Mengembalikan tatasusunan objek rentetan yang mengandungi semua permintaan yang diberikan Nilai parameter, atau null jika parameter tidak wujud.
27boolean isSecure()
Mengembalikan nilai Boolean yang menunjukkan sama ada permintaan menggunakan saluran selamat, seperti HTTPS.
28int getContentLength()
Mengembalikan panjang badan permintaan dalam bait dan menyediakan aliran input, atau jika If panjangnya tidak diketahui, -1 dikembalikan.
29int getIntHeader(String name)
Mengembalikan nilai pengepala permintaan yang ditentukan sebagai nilai int.
30int getServerPort()
Mengembalikan nombor port tempat permintaan ini diterima.

Contoh Permintaan Pengepala HTTP

Contoh berikut menggunakan kaedah getHeaderNames() HttpServletRequest untuk membaca maklumat pengepala HTTP. Kaedah ini mengembalikan penghitungan yang mengandungi maklumat pengepala yang berkaitan dengan permintaan HTTP semasa.

Sebaik sahaja kita mempunyai enum, kita boleh mengulangi enum dengan cara standard, menggunakan kaedah hasMoreElements() untuk menentukan bila hendak berhenti, menggunakan nextElement() kaedah untuk mendapatkan nama setiap parameter.

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

Kini, memanggil Servlet di atas akan menghasilkan keputusan berikut:

Contoh Permintaan Pengepala 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