揭開HTTP網(wǎng)絡(luò)協(xié)議神秘面紗系列(二)
HTTP報文內(nèi)的HTTP信息
HTTP協(xié)議交互的信息被稱為HTTP報文,請求端的HTTP報文叫做請求報文,響應(yīng)端的叫做響應(yīng)報文。
HTTP為了提升傳輸速率,其在傳輸數(shù)據(jù)時,按照數(shù)據(jù)原樣進行壓縮傳輸,相應(yīng)地客戶端會接受并解析內(nèi)容編碼后的實體。
在HTTP通信過程中,可以讓大容量的數(shù)據(jù)進行分塊分割傳輸,這方式能夠讓瀏覽器逐步顯示頁面。
HTTP采納了多部分對象集合,故發(fā)送的一份報文主體內(nèi)可含有多類型實體,不過需要在首部字段里加Content-type,并使用boundary字符串來劃分多部分對象集合指明的各類實體,boundary字符串指定的各個實體的起始之前插入”–”標(biāo)記,而在多部分對象集合對應(yīng)的字符串的***插入”–”標(biāo)記作為結(jié)束,示例:
HTTP可以在請求首部那里指定范圍來獲取指定的內(nèi)容。
Range:byte=5001-10000,獲取從5001到10000這段字節(jié)。
Range:byte=5001,獲取從5001之后全部的字節(jié)。
Range:byte=-3000,5000-7000,獲取從0到3000這段字節(jié),獲取從5000到7000這段字節(jié)
返回結(jié)果的HTTP狀態(tài)碼
以下會列出常見的幾個HTTP狀態(tài)碼:
200表示正常處理請求,并成功返回正常的數(shù)據(jù)。
204表示正常處理請求,但沒有資源可返回。
206表示正常處理請求,并返回請求那部分的資源數(shù)據(jù)。
301***性的給請求資源分配了新的URI,故以后使用該資源需要現(xiàn)在所指的新URI。
302臨時性的給請求資源分配了新的URI,這只是通知這次請求使用該新URI。
303明確通知請求采用GET方法且用該資源另一個URI發(fā)送。
304表示客戶端發(fā)送附帶條件的請求時(附帶條件指的是If-Match,If-Modified-Since等),服務(wù)器允許請求訪問資源,但未滿足條件的請況。
307與302類似,是臨時重定向。
400表示請求報文中存在語法錯誤。
401表示發(fā)送的請求需要有通過HTTP認證的認證信息,如果之前已進行過一次請求,則表示用戶認證失敗。
403表示請求資源的訪問被服務(wù)器拒絕了(一般都是權(quán)限問題)。
404表示服務(wù)器上無法找到請求的資源。
500表示服務(wù)器端在執(zhí)行請求時發(fā)生了錯誤。
503表示服務(wù)器暫時處于超負荷或正在進行停機維護,現(xiàn)在無法處理請求。
#p#
與HTTP協(xié)作的Web服務(wù)器
HTTP允許一臺HTTP服務(wù)器搭建多個Web站點,例如在相同的IP地址下,可以用虛擬主機寄存多個不同主機名和域名的Web網(wǎng)站,這樣一臺服務(wù)器可以托管www.tricorder.jp和www.hackrj.jp兩個域名。
代理:代理是一種具有轉(zhuǎn)發(fā)功能的應(yīng)用程序,它能接受客戶端的請求后轉(zhuǎn)發(fā)給服務(wù)器,同樣能接受服務(wù)器返回的響應(yīng)轉(zhuǎn)發(fā)給客戶端,代理可以分為下面兩類:
緩存代理:代理轉(zhuǎn)發(fā)響應(yīng)時,會預(yù)先將資源的副本保存在代理服務(wù)器上。
透明代理:轉(zhuǎn)發(fā)請求或響應(yīng)時,不對報文做任何加工。
網(wǎng)關(guān):是轉(zhuǎn)發(fā)其他服務(wù)器通信數(shù)據(jù)的服務(wù)器,接受從客戶端發(fā)送來的請求時,它就像自己擁有資源的源服務(wù)器一樣對請求進行處理,網(wǎng)關(guān)能是通信線路上的服務(wù)器提供非HTTP協(xié)議服務(wù)。
隧道:是在相隔甚遠的客戶端和服務(wù)器兩者之間進行中轉(zhuǎn),并保持雙方通信連接的應(yīng)用程序,這過程可以使用SSL等手段進行加密。
緩存一般有兩種方式:客戶端緩存和代理服務(wù)器緩存,客戶端一般緩存在本地磁盤中,代理服務(wù)器一般緩存在本地服務(wù)器存儲空間中,不過這兩種緩存會根據(jù)有效期限,請求要求,服務(wù)器該資源更新等情況來判斷緩存是否失效,一旦緩存失效,再次請求則會重新拉取源服務(wù)器的該資源并對其緩存。