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