Java開發學習筆記之三:HTTP客戶請求資料格式

來源:互聯網
上載者:User

  大多數servlet程式都是和瀏覽器客戶以HTTP協議進行通訊的,這需要編程人員對程式的準系統和HTTP協議的具體操作有深入的理解。在學習servlet和Jsp編程時,有兩點值得注意:首先是對HTTP協議的操作過程和資料格式足夠熟悉,其次要靈活應用servlet的API中的有關方法正確高效地處理有關資料。

一、HTTP客戶請求的資料格式說明
  HTTP請求包括三部分:請求行(Request Line),頭部(Headers)和資料體(Body)。其中,請求行由要求方法(method),請求網址Request-URI和協議(Protocol)構成,而要求標頭包括多個屬性,資料體則可以被認為是附加在請求之後的文本或二進位檔案。
  下面這個例子顯示了一個HTTP請求的Header內容,這些資料是真正以網路HTTP協議從IE瀏覽器傳遞到Tomcat伺服器上的。
GET /icwork/? search=product HTTP/1.1
Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword,*.*
Accept-Language:en-us
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 5.01;Windows NT 5.0;DigExt)
Host:www.icconcept.com:8080
Referer:http://www.yoursite.com/header.html
Connection:Keep-Alive
這段程式使用了6個Header,還有一些Header沒有出現。我們參考這個例子具體解釋HTTP請求格式。
1.HTTP請求行:請求行格式為Method Request-URI Protocol。在上面這個例子裡,“GET /icwork/? search=pruduct HTTP/1.1”是請求行。
2.Accept:指瀏覽器或其他客戶可以接愛的MIME檔案格式。Servlet可以根據它判斷並返回適當的檔案格式。
3.Accept-Charset:指出瀏覽器可以接受的字元編碼。英文瀏覽器的預設值是ISO-8859-1.
4.Accept-Language:指出瀏覽器可以接受的語言種類,如en或en-us,指英語。
5.Accept-Encoding:指出瀏覽器可以接受的編碼方式。編碼方式不同於檔案格式,它是為了壓縮檔並加速檔案傳遞速度。瀏覽器在接收到Web響應之後先解碼,然後再檢查檔案格式。
6.Authorization:當使用密碼機制時用來標識瀏覽器。
7.Cache-Control:設定關於請求被Proxy 伺服器儲存的相關選項。一般servlet用不到。
8.Connection:用來告訴伺服器是否可以維持固定的HTTP串連。HTTP/1.1使用Keep-Alive為預設值,這樣,當瀏覽器需要多個檔案時(比如一個HTML檔案和相關的圖形檔案),不需要每次都建立串連。
9.Content-Type:用來表名request的內容類型。可以用HttpServletRequest的getContentType()方法取得。
10.Cookie:瀏覽器用這個屬性向伺服器發送Cookie。Cookie是在瀏覽器中寄存的小型資料體,它可以記載和伺服器相關的使用者資訊,也可以用來實現會話功能。
11.Expect:表時客戶預期的響應狀態。
12.From:給出用戶端HTTP請求負責人的email地址。
13.Host:對應網址URL中的Web名稱和連接埠號碼。
14.If-Match:供PUT方法使用。
15.If-Modified-Since:客戶使用這個屬性工作表明它只需要在指定日期之後更改過的網頁。因為瀏覽器可以使用其儲存的檔案而不必從伺服器請求,這樣節省了Web資源。由於Servlet是動態產生的網頁,一般不需要使用這個屬性。
16.If-None-Match:和If-Match相反的操作,供PUT方法使用。
17.If-Unmodified-Since:和If-Match-Since相反。
18.Pragma:這個屬性只有一種值,即Pragma:no-cache,表明如果servlet充當Proxy 伺服器,即使其有已經儲存的網頁,也要將請求傳遞給目的伺服器。
19.Proxy-Authorization:Proxy 伺服器使用這個屬性,Servlet一般用不到。
20.Range:如果客戶有部分網頁,這個屬性可以請求剩餘部分。
21.Referer:表明產生請求的網頁URL。如比從網頁/icconcept/index.jsp中點擊一個連結到網頁/icwork/search,在向伺服器發送的GET/icwork/search中的請求中,Referer是http://hostname:8080/icconcept/index.jsp。這個屬性可以用來跟蹤Web請求是從什麼網站來的。
22.Upgrage:客戶通過這個屬性設定可以使用與HTTP/1.1不同的協議。
23.User-Agent:是客戶瀏覽器名稱。
24.Via:用來記錄Web請求經過的Proxy 伺服器或Web通道。
25.Warning:用來由客戶聲明傳遞或儲存(cache)錯誤。

二、下面是一個分析並顯示客戶請求的Header資訊的servlet(tomcat下測試通過):
package fey.servlets;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.Enumeration;

public class headerinfo extends HttpServlet{
  public void doPost(HttpServletRequest req,HttpServletResponse resp)
  throws ServletException,IOException
  {
   resp.setContentType("text/html; charset=GBK");
   PrintWriter out = resp.getWriter();
   out.println("<html><head><title>FormParameterServlet</title></head>");
   out.println("<body bgcolor=/"white/">");
   out.println("<center><font color=/"#009999/" size=/"4/" face=/"Arial/">");
   out.println("<strong>List of all Headers in Servlet Request</strong>");
   out.println("</font></center>");
   out.println("<hr>");
   out.println("<H3>Request Line is:</H3>");
   out.println("<b>Method:</b>"+req.getMethod()+"<br>");
   out.println("<b>URI:</b>"+req.getRequestURI()+"<br>");
   out.println("<b>Protocol</b>"+req.getProtocol()+"<br>");
   out.println("<center><h3>Header Name and Values</h3></center>");
   out.println("<table border=1 align=center>");
   out.println("<tr bgcolor='#99cee6'><th>Name</th><th>value</th></tr>");
   Enumeration headernames = req.getHeaderNames();
   while(headernames.hasMoreElements()){
    String headername = (String)headernames.nextElement();
    out.println("<tr><td>"+headername+"</td><td>"+req.getHeader(headername)+"</td></tr>");
   }
   out.println("</table></body></html>");
   out.flush();
  }
  public void doGet(HttpServletRequest req,HttpServletResponse resp)
  throws ServletException,IOException
  {
    doPost(req,resp);
  } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.