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