HTTP的GET跟POST請求

tags:    時間:2014-05-04 18:59:36
HTTP的GET和POST請求

1,GET請求:

格式如下:

  1. request-line
  2. headers
  3. blank-line
  4. request-body

如圖是我用wireshark截的一個GET請求的HTTP首部:


GET請求發送的參數跟在URI後面,形如www.baidu.com?sid=xxx&&name=xxx.該信息成為querying string(查詢字元串).見上圖的request-line就有.其中的類似%20,%40的是進行了URL編碼,空格為%20,@為%40等。


2.POST請求:

類似GET請求,分為4個部分:


有一些欄位是POST請求特有的,例如content-type說明了請求主題的編碼方式;content-length說明了請求主體內容的長度。


3.常見的請求頭:

 Accept:瀏覽器可接受的MIME類型。

 Accept - Charset:瀏覽器可接受的字符集。

 Accept - Encoding:瀏覽器能夠進行解碼的數據編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時間。

    Accept - Language:瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到。

    Authorization:授權信息,通常出現在對伺服器發送的WWW - Authenticate頭的應答中。

    Connection:表示是否需要持久連接。如果Servlet看到這裡的值為「Keep - Alive」,或者看到請求使用的是HTTP 1.1(HTTP 1.1默認進行持久連接),它就可以利用持久連接的優點,當頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現這一點,Servlet需要在應答中發送一個Content - Length頭,最簡單的實現方法是:先把內容寫入ByteArrayOutputStream,然後在正式寫出內容之前計算它的大小。

    Content - Length:表示請求消息正文的長度。

    Cookie:這是最重要的請求頭信息之一,參見後面《Cookie處理》一章中的討論。

    From:請求發送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。

    Host:初始URL中的主機和埠。

    If - Modified - Since:只有當所請求的內容在指定的日期之後又經過修改才返回它,否則返回304「Not Modified」應答。

    Pragma:指定「no - cache」值表示伺服器必須返回一個刷新后的文檔,即使它是代理伺服器而且已經有了頁面的本地拷貝。

    Referer:包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面。

    User - Agent:瀏覽器類型,如果Servlet返回的內容與瀏覽器類型有關則該值非常有用。

    UA - Pixels,UA - Color,UA - OS,UA - CPU:由某些版本的IE瀏覽器所發送的非標準的請求頭,表示屏幕大小、顏色深度、操作系統和CPU類型。


4.HTTP響應:

格式:

  1. status-line
  2. headers
  3. bland line
  4. response-body




Web伺服器會發送很多的狀態碼,根據第一位數字可以分為五類:

1xx:HTTP制定的並且用於HTTP傳輸的低層。CGI腳本不能使用。

2xx:表示請求的所有部分正常。

3xx:表示一些重定向的方式。

4xx:表示瀏覽器操作有誤

5xx:伺服器或者是在其上面運行的CGI腳本是有錯誤的。


常見的狀態碼:

200   (成功)  伺服器已成功處理了請求。 通常,這表示伺服器提供了請求的網頁。

     

201   (已創建)  請求成功並且伺服器創建了新的資源。

202   (已接受)  伺服器已接受請求,但尚未處理。

203   (非授權信息)  伺服器已成功處理了請求,但返回的信息可能來自另一來源。

204   (無內容)  伺服器成功處理了請求,但沒有返回任何內容。

205   (重置內容) 伺服器成功處理了請求,但沒有返回任何內容。

206   (部分內容)  伺服器成功處理了部分 GET 請求。



3xx (重定向)

表示要完成請求,需要進一步操作。 通常,這些狀態代碼用來重定向。


代碼   說明    

300   (多種選擇)  針對請求,伺服器可執行多種操作。 伺服器可根據請求者 (user agent) 選擇一項操作,或提供操作列表供請求者選擇。

301   (永久移動)  請求的網頁已永久移動到新位置。 伺服器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。

302   (臨時移動)  伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。

303   (查看其他位置) 請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,伺服器返回此代碼。

304   (未修改) 自從上次請求后,請求的網頁未修改過。 伺服器返回此響應時,不會返回網頁內容。

305   (使用代理) 請求者只能使用代理訪問請求的網頁。 如果伺服器返回此響應,還表示請求者應使用代理。

307   (臨時重定向)  伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。



4xx(請求錯誤)

這些狀態代碼表示請求可能出錯,妨礙了伺服器的處理。


代碼   說明    

400   (錯誤請求) 伺服器不理解請求的語法。

401   (未授權) 請求要求身份驗證。 對於需要登錄的網頁,伺服器可能返回此響應。

403   (禁止) 伺服器拒絕請求。

404   (未找到) 伺服器找不到請求的網頁。

405   (方法禁用) 禁用請求中指定的方法。

406   (不接受) 無法使用請求的內容特性響應請求的網頁。

407   (需要代理授權) 此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理。

408   (請求超時)  伺服器等候請求時發生超時。

409   (衝突)  伺服器在完成請求時發生衝突。 伺服器必須在響應中包含有關衝突的信息。

410   (已刪除)  如果請求的資源已永久刪除,伺服器就會返回此響應。

411   (需要有效長度) 伺服器不接受不含有效內容長度標頭欄位的請求。

412   (未滿足前提條件) 伺服器未滿足請求者在請求中設置的其中一個前提條件。

413   (請求實體過大) 伺服器無法處理請求,因為請求實體過大,超出伺服器的處理能力。

414   (請求的 URI 過長) 請求的 URI(通常為網址)過長,伺服器無法處理。

415   (不支持的媒體類型) 請求的格式不受請求頁面的支持。

416   (請求範圍不符合要求) 如果頁面無法提供請求的範圍,則伺服器會返回此狀態代碼。

417   (未滿足期望值) 伺服器未滿足"期望"請求標頭欄位的要求。



5xx(伺服器錯誤)

這些狀態代碼表示伺服器在嘗試處理請求時發生內部錯誤。 這些錯誤可能是伺服器本身的錯誤,而不是請求出錯。


代碼   說明    

500   (伺服器內部錯誤)  伺服器遇到錯誤,無法完成請求。

501   (尚未實施) 伺服器不具備完成請求的功能。 例如,伺服器無法識別請求方法時可能會返回此代碼。

502   (錯誤網關) 伺服器作為網關或代理,從上游伺服器收到無效響應。

503   (服務不可用) 伺服器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態。

504   (網關超時)  伺服器作為網關或代理,但是沒有及時從上游伺服器收到請求。

505   (HTTP 版本不受支持) 伺服器不支持請求中所用的 HTTP 協議版本。


推薦閱讀文章

Bookmark the permalink ,來源:互聯網