linux高性能服務器編程學習筆記四:HTTP協議相關格式

1HTTP請求

GET http://www.baidu.com/index.htmlHTTP/1.0(請求行)

User-Agent: Wget/1.12 (linux-gnu)(頭部字段)

Host:www.baidu.com(頭部字段)

Connection:close(頭部字段)

1GET爲請求方法,表示客戶端以只讀的方式申請服務器的資源。常見的方法見下表


其中,HEADGETOPTIONSTRACE被視爲安全的方法,因爲它們只申請獲取資源而不對服務器進行任何的修改;

另一方面,HEADGETOPTIONSTRACEPUTDELETE等請求方法被認爲是等冪的,也就是多次連續的、重複的請求和只發送一次該請求具有完全相同的效果。而POST則不同,連續多次發送同樣一個請求可能進一步影響服務器上的資源。

方法後面的網址是目標資源的URL。其中index.html指定資源文件的名稱。

2User-Agent:Wget/1.12(linux-gnu)表示客戶端使用的程序是wget

3HOST字段表示目標的主機名,主機名是www.baidu.com。注意:HTTP協議規定HTTP請求必須有HOST字段。

4Connection字段表示連接的類型,假如爲close,表示處理完這個HTTP請求之後就關閉連接。假如爲keep-alive,表示爲長連接(可用netstat命令查看和web服務器的連接是否爲長連接)。長連接就是一個TCP連接能夠處理多個HTTP請求,而期間不用關閉連接再建立連接,因此減少了建立TCP連接導致的負荷。

注意,在所有頭部字段之後必須有一個空行,空行標誌者頭部字段的結束。

5)頭部字段之後就爲可選的消息體,如果消息體非空,則HTTP請求的頭部字段必須有Content-Length字段,描述消息體的長度。

2HTTP應答

HHTP/1.0 200 OK

ServerBWS/1.0

Content-Length:8024

Content-Type:text/html;charset = gbk

Set-Cookie:

Via:1.0 localhost (squid/3.0 STABLE18)

1)第一行是狀態行。HTTP/1.0表示http協議的版本號。 200 OK是狀態碼和狀態信息,200表示請求成功,常見的狀態碼和狀態信息如下:

an lang=EN-US>Connection:close(頭部字段)

1GET爲請求方法,表示客戶端以只讀的方式申請服務器的資源。常見的方法見下表


(2)第2-7行是應答的頭部字段。Server字段表示目標web服務器程序的名字爲BWS(baidu web server)。Content-Length字段表示目標文檔的長度爲8024字節。Content-Type表示目標文檔的字符編碼等信息。Set-Cookie表示目標服務器使用cookie,傳送一個cookie給客戶端。Cookie的作用使得服務器能夠識別不同的用戶。http協議是一種無狀態的協議,也就是說,每個HTTP請求之間沒有任何的上下文關係。如果服務器處理後續的HTTP請求時需要用到前面的HTTP請求的相關信息,客戶端還需要重傳這些信息。這就導致HTTP請求必須傳輸更多的數據,而使用的cookie之後,客戶端每次向服務器發送請求都需要帶上服務器在Set-Cookie字段的給客戶端的特殊信息(客戶端發送利用Cookie字段)。這樣服務器就能區分不同的客戶,這對於交互式web應用程序尤其重要(通常需要承上啓下)。Via字段表明HTTP應答在返回途中經歷過的所有代理器服務器的地址和名稱。類似於IP協議的記錄路由功能。同樣最後需要一個空行表示頭部字段的終結。

(3)而空行之後就是申請的index.html資源的內容。
發佈了35 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章