三、 請求行
請求行的格式為:method request-uri http-version[換行]。這裡的[換行]表示後面的資料需要另起一行寫,即請求行獨佔一行。
request-uri是指請求頁面的uri。而method即為方法,它指定了請求使用的方法,方法有多種,如圖:
方法是大小寫敏感的,如:get是方法當get不是。
get方法就是請求伺服器傳送頁面的意思。使用這個方法的請求沒有請求正文。
head方法則只請求伺服器回送訊息頭(響應頭)而不需要真正的頁面,因而使用這個方法的請求的響應是沒有響應正文的。
post方法想伺服器傳送表單資料並請求回送頁面。表單資料寫在請求正文中。
put方法在伺服器中寫入乙個頁面,頁面內容通常在請求正文中。執行這個方法必須有在伺服器上的寫許可權,因而必須在請求頭中指定authorization的值(後述)。
delete方法與put方法相反,它是在伺服器上刪除頁面。顯然,也是需要許可權的。
trence方法指示伺服器回送它接收到的請求,它主要用於除錯。
connect方法表示通過乙個中間裝置來與伺服器建立連線來傳送請求(獲取頁面)。使用**伺服器通常就需要使用這個方法。
opetions方法用於向伺服器查詢乙個頁面的資訊,獲取可用於該頁面的方法和頭。
乙個典型的例子為:get /index.html http/1.1[換行]。
四、 狀態行
響應行的格式為:http-version status-code reason-phrase[換行]。
status-code表示伺服器發回的響應狀態**;reason-phrase表示狀態**的文字描述。狀態碼是乙個3位的數字,根據第乙個數字分為5大組,如圖:
乙個典型的例子:http/1.1 200 ok[換行]。
五、 請求頭與響應頭
請求頭與響應頭的內容為一組鍵值對,以[key]:[value][換行]的形式儲存,用於指定請求報文或響應報文的詳細引數。http規定的引數有很多,如圖:
user-agent頭用於告訴伺服器客戶端的資訊,通常為瀏覽器的資訊,如mozilla/5.0、windows nt 5.0等。
accept:指定客戶端可以接收的資訊型別,如text/html、image/gif等。
accept-charset:指定客戶端可接收的字符集。
accept-encoding:指定客戶端可接收的編碼方式,這裡的編碼是指gzip等用於壓縮或加密等的方式,並非指字元的編碼,字元的編碼由accept-charset指定。
accept-language:指定客戶端可接收的自然語言,如zh-cn等。
if-modified-since,if-none-match用於檢測本地快取是否fresh(後述)。
host頭是必須的,每乙個請求頭都必須包含這個引數,它指定了伺服器的網域名稱,用於訪問伺服器。
authorization:用於指定客戶的許可權資訊,證明客戶有許可權檢視被保護的頁面或執行特權操作(如寫入頁面、刪除頁面)。
refer:用於給伺服器傳送發出當前請求的頁面的url。
cookie:給伺服器傳送的cookie資料。
set-cookie:給使用者傳送的cookie資料。
server頭與user-agent對應,給客戶端傳送的伺服器的資訊。
content-type、content-encoding、content-language頭分別指定回送頁面的內容型別、編碼與自然語言。而content-length則為頁面的位元組長度。
content-range:指定回送的頁面的範圍,一般用於頁面內容過大需要分次顯示的情況下。accept-range與其不同,它用於指定伺服器可接受的請求位元組範圍。
last-modified頭說明頁面最後被修改的時間,而expires則說明頁面能保持多長的有效時間。
location頭用於通知客戶端應去嘗試的另乙個url,通常用於網域名稱重定向。
date:用於指定請求或響應的日期。
etag:用於給客戶端或伺服器傳送乙個頁面的標籤,通常用於快取。這裡說的標籤是用於唯一標識乙個頁面的加密的雜湊值。
六、 請求正文與響應正文
響應正文一般為請求頁面的html。
請求正文在請求中並非強制的,它依賴於請求方法。為get方法時,一般沒有,為post方法時,正文則儲存傳送給伺服器的表單資料。如下示例所示:
七、 快取機制
人們往往會返回之前瀏覽過的web頁面,而這樣頁面也往往會有許多嵌入式資源,如**背景等。若每次瀏覽都要到伺服器去獲取將大大地浪費資源。瀏覽器往往會積攢已經獲取的頁面義工日後使用,這被稱為快取機制。
http快取的困難問題在於如何確定以前快取的頁面和將要重新獲取的頁面是一樣的,因為乙個頁面的內容可能時常更新,使用快取的舊版本就不再合適。http協議使用兩種策略來解決這個問題。
1. 訪問快取頁面,檢視其是否有效。快取頁面最初獲取時若指定了該頁面的expires頭,那麼可以根據expires頭指定的日期和時間跟當前日期和時間對比,來做出頁面是否有效的決定。這個策略的問題在於,並非每個頁面都會指定乙個expires,比如新聞**,就無法指定這個值,它可能隨時更新。因而,僅使用這個策略還不夠。
2. 在第一種策略無效的情況下,將使用第二種策略。這種策略要求連線伺服器進行資訊查詢,以決定快取的副本是否有效。快取頁面在最初獲取時得到last-modified頭的時間日期資訊,則可以使用if-modified-since頭髮送該時間到伺服器,詢問頁面是否已經發生改變,若未發生改變則使用快取版本不需要重新獲取,否則重新獲取。當然,快取頁面在最初獲取時也可能得到etag頭,那麼也可以使用if-none-match頭髮送接收到的etag到伺服器,檢視是否匹配。etag值是乙個加密的雜湊值,頁面被修改後,該頁面對應的雜湊值也會改變,因而檢視該值是否匹配可以決定頁面是否有效。
Http協議 概要
http協議 超文字傳輸協議 是位於tcp ip結構中的應用層的一種傳輸協議,規定了全球資訊網伺服器之間相互通訊的規則。比如比較常見的web瀏覽器客戶端與應用伺服器的通訊!全球資訊網伺服器之間互相通訊的時候往往需要其它協議的配合才能完成整個通訊的作業,比如應用層的dns協議,網路層的ip協議等眾多協...
ICE 協議概要
1 ice協議由三部分組成 1 資料編碼規範,用來進行各種資料型別的序列化。2 客戶端與伺服器端的互動的訊息型別,以及在何種情況下應發出何種訊息的規範。3 客戶端與伺服器端如何協商二者所用協議及編碼版本的規範。2 資料編碼規範 1 數值型別的編碼是little endian x86的都是這個,所以基...
http資料報概要記錄
http協議也就是超文字傳輸協議在通訊時,由客戶端發出請求連線,服務端建立連線 然後,客戶端發出http請求 request 服務端返回響應資訊 respond 由此完成乙個http操作。connecting to go2.163.com 連線伺服器 connected to go2.163.com...