1,get請求:
格式如下:
request-line headers blank-line 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響應:
格式: status-line bland line 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 協定版本。