一、http報文是面向文字的,報文中的每乙個欄位都是一些ascii碼串,各個欄位的長度是不確定的。http有兩類報文:請求報文和響應報文。
乙個http請求報文由請求行(request line)、請求頭部(header)、空行和請求資料4個部分組成,下圖給出了請求報文的一般格式。
給乙個更加清晰,明了的:
以下逐步分析各個資料部分的作用。
1、請求行
請求行由請求方法字段、url欄位和http協議版本欄位3個字段組成,它們用空格分隔。
例如開啟路徑用火狐瀏覽器可以檢視到請求報文為:
因此用空格分隔之後得到的資訊為
(1)請求方法: get
(2)url資訊: /index.php
(3)http協議版本: http/1.1
請求方法的型別:
1、get:get方法get方法要求伺服器將url定位的資源放在響應報文的資料部分,回送給客戶端。使用get方法時,請求引數和對應的值附加在url後面,利用乙個問號(「?」)代表url的結尾與請求引數的開始,傳遞引數長度受限制,各個資料之間用」&」符號隔開,傳送的資料直接在瀏覽器的位址條裡就能夠看到。顯然,這種方式不適合傳送私密資料。另外,由於不同的瀏覽器對位址的字元限制也有所不同,一般最多只能識別1024個字元,所以如果需要傳送大量資料的時候,也不適合使用get方式。
2、post:post方法將請求引數封裝在http請求資料中,以名稱/值的形式出現,可以傳輸大量資料,post方式對傳送的資料大小沒有限制,而且也不會顯示在url中。
get和post乙個各有優缺點, get方法請求的資料,都一樣,使用者可以隨意複製路徑分享給其它人,post方法不限制請求資料量,常用於表單提交。post方法比get方法安全性強。
3、head:就像get,只不過服務端接受到head請求後只返回響應頭,而不會傳送響應內容。當我們只需要檢視某個頁面的狀態的時候,使用head是非常高效的,因為在傳輸的過程中省去了頁面內容。也就是說,該方法只用於測試一下當前伺服器的狀態。
2、請求頭部
user-agent:瀏覽器的具體型別 如:user-agent:mozilla/5.0 (windows nt 6.1; rv:17.0) gecko/20100101 firefox/17.0
accept-charset:瀏覽器採用的是哪種編碼 如:accept-charset: iso-8859-1
accept-encoding:瀏覽器支援解碼的資料壓縮格式 如:accept-encoding: gzip, deflate
accept-language:瀏覽器的語言環境 如:accept-language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
host:請求的主機名,允許多個網域名稱同處乙個ip位址,即虛擬主機。host:www.baidu.com
content-length:表示請求訊息正文的長度。對於post請求來說content-length必須出現。
content-type:web伺服器告訴瀏覽器自己響應的物件的型別和字符集。例如:content-type: text/html; charset='gb2312'
content-encoding:web伺服器表明自己使用了什麼壓縮方法(gzip,deflate)壓縮響應中的物件。例如:content-encoding:gzip
content-language:web伺服器告訴瀏覽器自己響應的物件的語言。
cookie:最常用的請求頭,瀏覽器每次都會將cookie傳送到伺服器上,允許伺服器在客戶端儲存少量資料。
referer:包含乙個url,使用者從該url代表的頁面出發訪問當前請求的頁面。伺服器能知道你是從哪個頁面過來的。referer:
二、http響應報文
http響應報文與http請求報文是對應的,也是分為三個部分。
1、響應行
2、響應頭
3、響應體
給個例項:
200ok //響應行
http響應報文常用屬性:
cache-control
響應輸出到客戶端後,服務端通過該報文頭屬告訴客戶端如何控制響應內容的快取。
下面,的設定讓客戶端對響應內容快取3600秒,也即在3600秒內,如果客戶再次訪問該資源,直接從客戶端的快取中返回內容給客戶,不要再從服務端獲取(當然,這個功能是靠客戶端實現的,服務端只是通過這個屬性提示客戶端「應該這麼做」,做不做,還是決定於客戶端,如果是自己宣稱支援http的客戶端,則就應該這樣實現)。
cache-control: max-age=3600
etag
乙個代表響應服務端資源(如頁面)版本的報文頭屬性,如果某個服務端資源發生變化了,這個etag就會相應發生變化。它是cache-control的有益補充,可以讓客戶端「更智慧型」地處理什麼時候要從服務端取資源,什麼時候可以直接從快取中返回響應。
etag: "737060cd8c284d8af7ad3082f209582d"
location
我們在asp.net中讓頁面redirect到乙個某個a頁面中,其實是讓客戶端再發乙個請求到a頁面,這個需要redirect到的a頁面的url,其實就是通過響應報文頭的location屬性告知客戶端的,如下的報文頭屬性,將使客戶端redirect到iteye的首頁中:
location:
set-cookie
服務端可以設定客戶端的cookie,其原理就是通過這個響應報文頭屬性實現的。
set-cookie: userid=johndoe; max-age=3600; version=1
http響應體:如果請求的是html頁面,那麼返回的就是html**。如果是js就是js**。
http響應頭:而設定cookie,快取等資訊就是在響應頭屬性設定的。
http響應行:主要是設定響應狀態等資訊。
HTTP請求報文與響應報文
自用 http協議是以ascii碼傳輸,建立tcp ip協議之上的應用層規範。http請求報文 規範把http請求分為三個部分 狀態行 請求頭 訊息主體 狀態行 請求頭 訊息主體method 基本的方法有四種 get post put delete url 統一資源定位符,描述乙個網路上的資源的位置...
HTTP請求報文 響應報文
connection close 伺服器傳送完請求物件後就關閉這條連線 user agent mozilla 5.0 使用者 即向伺服器傳送請求的瀏覽器型別 accept language fr 表示使用者想得到該物件的法語版本http的請求報文第一行叫做請求行,其後繼的為首部行。請求行有三個字段 ...
HTTP請求與響應報文
http協議和cookie的儲存狀態 http協議本身是一種不儲存狀態,即無狀態 stateless 協議。http協議自身不對請求和響應之間的通訊狀態進行儲存。這是為了更快的處理大量事務,為了確保協議的可伸縮性 請求報文 get index.html http 1.1 http 1.1是http的...