認(rèn)識(shí)http協(xié)議(一)
關(guān)于http協(xié)議,相信一般的人都知道,相關(guān)的文章網(wǎng)上一抓一大把。但是對http協(xié)議的細(xì)節(jié)真的都清楚了嗎?我自問了一下,很是慚愧,于是決定好好捋捋。
刨開表層看內(nèi)在,首先裝上httpwatch親眼目睹一下http的真容:訪問google看看

請求報(bào)頭
GET http://www.google.com/ HTTP/1.1 Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Accept-Encoding: gzip, deflate Proxy-Connection: Keep-Alive Host: www.google.com Cookie: PREF=ID=f3aa0c45021b6ab1:U=b049e7b9deea7680:FF=0:NW=1:TM=1286955376:LM=1286956336:S=mA1groKA...
- GET http://www.google.com/ HTTP/1.1
指明http協(xié)議中信息提交的方式,最常用的有兩種方式,第一種為GET,第二種為POST
- Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel…
Accept請求報(bào)頭域用于指定客戶端接受哪些類型的信息,如:Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept:text/html,表明客戶端希望接受html文本。
- Accept-Language: zh-cn
指定Accept-Language指定返回的字符集,這里zh-cn表示是中文
- User-Agent
我們上網(wǎng)登陸論壇的時(shí)候,往往會(huì)看到一些歡迎信息,其中列出了你的操作系統(tǒng)的名稱和版本,你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很神奇,實(shí)際上,服務(wù)器應(yīng)用程序就是從User-Agent這個(gè)請求報(bào)頭域中獲取到這些信息。User-Agent請求報(bào)頭域允許客戶端將它的操作系統(tǒng)、瀏覽器和其它屬性告訴服務(wù)器。
- Accept-Encoding
Accept-Encoding請求報(bào)頭域類似于Accept,但是它是用于指定可接受的內(nèi)容編碼。如果請求消息中沒有設(shè)置這個(gè)域服務(wù)器假定客戶端對各種內(nèi)容編碼都可以接受
- Proxy-Connection
這里表示我是通過代理服務(wù)器訪問的,嘿嘿,你懂的。Kepp-Alive表示使用socket長連接。
- Host
Host請求報(bào)頭域主要用于指定被請求資源的Internet主機(jī)和端口號(hào),此處使用缺省端口號(hào)80
- Cookie
表示我的cookie信息
響應(yīng)報(bào)頭與實(shí)體報(bào)頭:
當(dāng)服務(wù)器接收到這個(gè)請求后,根據(jù)這個(gè)請求的描述,返回相應(yīng)的內(nèi)容:
HTTP/1.1 200 OK Date: Wed, 26 Jan 2011 03:04:20 GMT Server: gws Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip Content-Length: 5575 X-XSS-Protection: 1; mode=block X-Cache: MISS from google.com X-Cache-Lookup: MISS from google.com:86 Connection: close
- HTTP/1.1 200 OK:指定http的協(xié)議和返回碼,指定使用的是http/1.1協(xié)議,返回碼是200 ok
- Server:包含服務(wù)器用來處理請求的軟件信息。與User-Agent請求報(bào)頭域是相對應(yīng)的,GWS是google專用的web服務(wù)器.
- Expires:表示超時(shí)時(shí)間
- Cache-Control:表示使用的緩存機(jī)制;
Cache-Control: cache-directive
cache-directive可以為以下:
request時(shí)用到:
| "no-cache"
| "no-store"
| "max-age" "=" delta-seconds
| "max-stale" [ "=" delta-seconds ]
| "min-fresh" "=" delta-seconds
| "no-transform"
| "only-if-cached"
| "cache-extension"
response時(shí)用到:
| "public"
| "private" [ "=" <;"> field-name <"> ]
| "no-cache" [ "=" <;"> field-name <"> ]
| "no-store"
| "no-transform"
| "must-revalidate"
| "proxy-revalidate"
| "max-age" "=" delta-seconds
| "s-maxage" "=" delta-seconds
| "cache-extension"
部分說明:
根據(jù)是否可緩存分為
Public 指示響應(yīng)可被任何緩存區(qū)緩存。
Private 指示對于單個(gè)用戶的整個(gè)或部分響應(yīng)消息,不能被共享緩存處理。這允許服務(wù)器僅僅描述當(dāng)用戶的
部分響應(yīng)消息,此響應(yīng)消息對于其他用戶的請求無效。
no-cache 指示請求或響應(yīng)消息不能緩存(HTTP/1.0用Pragma的no-cache替換)
根據(jù)什么能被緩存
no-store 用于防止重要的信息被無意的發(fā)布。在請求消息中發(fā)送將使得請求和響應(yīng)消息都不使用緩存。
根據(jù)緩存超時(shí)
max-age 指示客戶機(jī)可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)。
min-fresh 指示客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)。
max-stale 指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息。如果指定max-stale消息的值,那么客戶機(jī)可以
接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。
- Content-Encoding:表示采用的編碼方式,這里是采用gzip壓縮
- Content-Type: 用于指明發(fā)送給接收者的實(shí)體正文的媒體類型
- Content-Length:用于指明實(shí)體正文的長度,以字節(jié)方式存儲(chǔ)的十進(jìn)制數(shù)字來表示。
- X-Cache: 表示我的 http request 是由 proxy server 回的 ,MISS 表 proxy 無資料
以上只是http協(xié)議報(bào)頭的一部分內(nèi)容,未完待續(xù)…

浙公網(wǎng)安備 33010602011771號(hào)