http基於客戶端 - 伺服器體系結構模型和無狀態請求/響應協議,該協議通過可靠的tcp / ip連線交換訊息來執行。本篇就來學習http訊息,可以說請求是乙個訊息,響應也是這個訊息。通過學習http訊息,接下來學習http請求和響應會更順利一些。
http「客戶端」是為了傳送乙個或多個http請求訊息而與伺服器建立連線的程式(web瀏覽器或任何其他客戶端)。 http「伺服器」是乙個程式(通常是apache web伺服器或internet資訊服務iis等web伺服器),它接受連線以通過傳送http響應訊息來提供http請求。
1.http訊息語法格式
http利用統一資源識別符號(uri)來標識給定資源並建立連線。 建立連線後,http訊息的傳遞格式類似於internet郵件[rfc5322]和多用途internet郵件擴充套件(mime)[rfc2045]所使用的格式。這種http訊息,不管是客戶端到伺服器的請求還是伺服器到客戶端的響應,都遵循以下訊息格式。
http-message = | ; http/1.1 messages
2.http訊息包含內容
乙個完整的http訊息包含以下4部分
乙個 start-line(起始行)
0或者多個標題字段後面跟著crlf
乙個空行(指示標題欄位的結尾)
可選的 訊息-正文
下面我們依次來詳細解釋每乙個部分的內容。
3. start-line(起始行)
乙個start-line通常會有以下語法:
start-line = request-line | status-line
關於request-line 和 status-line,我們分別在後面文章介紹http請求和http響應的時候來學習。現在來看看乙個請求和乙個響應的起始行例子。
get /hello.htm http/1.1 (請求:從客戶端發出的起始行)
http/1.1 200 ok (響應:從伺服器發出的起始行)
這個請求和響應的起始行,我們後邊都會逐一學習和看到(截圖)來分析和介紹每一行和每乙個欄位的含義。
4.header fields(頭欄位)
http頭欄位提供有關請求或響應的所需資訊,或有關在訊息正文中傳送的物件的資訊。 有四種型別的http訊息頭:
general-header: 一般頭,這種頭欄位同時適用於請求和響應訊息。
request-header: 請求頭,只是適用於請求訊息
response-header: 響應頭,只是適用於響應訊息
entity-header: 實體頭,定義關於實體主體的元資訊,或者,如果不存在主體,則定義關於請求標識的資源。
以上提到的頭都遵循相同的通用格式,每個頭字段由乙個名稱後跟冒號(:)和字段值組成,就像map中鍵值對,如下所示:
message-header = field-name ":" [ field-value ]
以下是一些頭欄位例子
user-agent: curl/7.16.3 libcurl/7.16.3 openssl/0.9.7l zlib/1.2.3
host: www.example.com
accept-language: en, mi
date: mon, 27 jul 2009 12:28:53 gmt
server: apache
last-modified: wed, 22 jul 2009 19:15:56 gmt
etag: "34aa387-d-1568eb00"
accept-ranges: bytes
content-length: 51
vary: accept-encoding
content-type: text/plain
5. message body(訊息正文)
訊息正文部分對於http訊息是可選的,例如,請求訊息很多情況下是沒有請求正文,但如果它可用,則它用於攜帶與請求或響應相關聯的實體主體。 如果實體主體是關聯的,那麼通常content-type和content-length標題行指定相關主體的性質。
訊息體是承載來自伺服器的實際http請求資料(包括表單資料和上載等)和http響應資料(包括檔案,影象等)的訊息體。 例如有些響應訊息正文就是乙個html檔案,或者一張,如果是,有可能顯示的是二進位制資料。下面顯示的是郵件正文的簡單內容:
下面兩篇文章,我們就開始來學習http請求和http響應,相對來說,http響應內容是比較少的。 HTTP協議3 HTTP請求方法
根據http標準,http請求可以使用多種請求方法。http1.0定義了三種請求方法 get,post 和 head方法。http1.1新增了五種請求方法 options,put,delete,trace 和 connect 方法。序號 方法描述 1get 請求指定的頁面資訊,並返回實體主體。2he...
Http協議 3 HTTP實體和編碼
http實體實現目標 可以被正確識別 通過content type和content launage 可以被正確解包 通過content lenght首部和content encoding首部 是最新的 通過實體驗證碼和快取過期控制 符合使用者需要 基於accept系列的內容協商首部 在網路上可以快速...
網路協議分析3 HTTP
在瀏覽器輸入url,回車以後發生了什麼?第一,找到伺服器 第二,建立tcp連線 第三,建立http連線 第四,斷開tcp連線 客戶端和伺服器端的通訊遵守了http協議,自然需要封裝http報文 http請求報文 請求行 方法 get post url 版本 1.1 http協議的請求方法有 get ...