2. http報文
http 協議,用於客戶端和伺服器端之間的通訊,請求從客戶端發出,最後伺服器端響應該請求並返回。
http=請求+響應。
請求 = 請求方法 + 請求的資源物件uri + http版本號 + 請求首部 + 內容實體。
響應 = http版本號 + 結果響應**和原因 + 響應首部 + 資源實體。
http 協議的初始版本中,每進行一次 http 通訊就要斷開一次 tcp連線,如果請求的資源很多,勢必會增大通訊開銷。後來,有人提出了持久化連線。它的特點是,只要任意一端沒有明確提出斷開連線,則保持 tcp 連線狀態,從而大大減輕了伺服器端的負載。
持久連線使得多數請求以管線化(pipelining)方式傳送成為可能。多個請求可以併發傳送,不需要等待響應了。
使用 http協議,每當有新的請求傳送時,就會有對應的新響應產生。協議本身並不保留之前一切的請求或響應報文的資訊。為了方便管理http的狀態,引入了cookie技術。cookie 技術通過在請求和響應報文中寫入 cookie 資訊來控制客戶端的狀態。
第一次請求之後:伺服器端生成乙個只屬於該客戶端的cookie,把它和乙個」set-cookie「的首部字段資訊放入響應報文內並發給客戶端,通知客戶端儲存 cookie。
第二次傳送請求時:伺服器端發現客戶端傳送過來的 cookie 後,會去檢查究竟是從哪乙個客戶端發來的連線請求,然後對比伺服器上的記錄,最後得到之前的狀態資訊。
全稱:hypertext transfer protocol(超文字傳輸協議),是 tcp/ip 協議族的乙個應用層協議,用於定義web瀏覽器與web伺服器之間交換資料的過程。
通俗的講,當客戶端或者瀏覽器連線上伺服器之後,若想獲得 web 伺服器中的 web 資源,就必須與 服務端進行通訊,通訊的雙方必須能夠解析傳送的訊息,那麼這個訊息就要符合一定的通訊格式,http 就是用於定義雙方的通訊格式。
http報文由四部分組成,由上到下依次為 起始行、頭部字段、空白行和訊息正文(實體)。其中,請求行和頭部欄位又一起被稱為「請求頭」或者「響應頭」。請求頭和響應頭與 「body」 中間有乙個空行(crlf)作為區分兩者的邊界,記住是第乙個空行(crlf),如果有多個空行,那麼其他的空行則被歸為「body」。所以乙個完整的報文如下圖所示
下面我們具體來看一下請求報文和響應報文的結構。先來看一下請求報文的,其結構如下所示:
(1)請求行:包括請求方法、請求目標和協議版本
請求方法:
get:獲取資源。用來請求訪問已被 uri 識別的資源,指定的資源經伺服器端解析後返回響應內容。
post:傳輸實體主體。
put:傳輸檔案,但是自身不帶驗證機制。
delete:刪除檔案,但是自身不帶驗證機制。
head:獲得報文首部。用於確認uri 的有效性及資源更新的日期時間等。
options:詢問支援的方法。
trace:追蹤路徑,讓 web 伺服器端將之前的請求通訊環迴給客戶端的方
法。傳送請求時,客戶端在 max-forwards 首部欄位中填入數值,每經過乙個服
務器端就將該數字減 1,當數值剛好減到 0 時,就停止繼續傳輸,伺服器發出響應。
connect:用隧道協議連線**伺服器,可以加密通訊內容。
請求目標
url(uniform resource locator,統一資源定位),通過描述資源的位置來標識資源。
注意:uri (uniform resource indentifier,統一資源標識),用來唯一的標識乙個資源,是乙個通用的概念,uri由兩個主要的子集url和urn組成。urn(uniform resource name,統一資源命名),通過資源的名字來標識資源,與其所處的位置無關,這樣即使資源的位置發生變動,其urn也不會變化。
協議版本
格式為http/主版本號.次版本號,常用為:http/1.1 http/1.0
(2)請求頭部
頭部欄位是由欄位名和字段值構成的,中間用冒號「:」 分隔,可以有多個值。
user-agent:傳送請求的應用名稱
accept-charset:通知伺服器端可以傳送的編碼格式
accept-encoding:通知伺服器端可以傳送的資料壓縮格式
accept-language:通知伺服器端可以傳送的語言
(3)空白行
(4)請求體
接下來我們再來看一下響應報文的結構,如下所示:
(1)狀態行
協議版本:同請求報文
狀態碼:100-199表示請求已收到繼續處理,200-299表示成功,300-399表示資源重定向,400-499表示客戶端請求出錯,500-599表示伺服器端出錯。常見的有以下幾個:
200:響應成功
301:資源(網頁等)被永久轉移到其它url
302:資源臨時移動
400:客戶端有語法錯誤
403:forbidden,伺服器理解請求客戶端的請求,但是拒絕執行此請求。請求資源被拒絕,通常原因是伺服器上某些檔案或目錄設定了許可權,客戶端許可權不夠
500:internal server error 伺服器內部錯誤(比如瀏覽器**除了問題,ip,埠不對等)該狀態碼表明伺服器端在執行請求時發生了錯誤。也有可能是web應用存在的bug或某些臨時的故障。
502:bad gateway,作為閘道器或者**工作的伺服器嘗試執行請求時,從遠端伺服器接收到了乙個無效的響應
503:伺服器超載或停機維護
504:gateway timeout閘道器超時 伺服器作為閘道器或**,未及時從上游伺服器接收請求。
狀態碼描述:作為狀態行的補充說明
(2)響應頭部字段
server:伺服器應用軟體的名稱和版本
content-type:響應正文的型別
content-length:響應正文的長度
content-charset:響應正文所使用的編碼
content-encoding:響應正文使用的資料壓縮格式
content-language:響應正文使用的語言
(3)空白行
(4)響應體
計算機網路 HTTP報文
一 http報文 http 報文是在 http 應用程式之間傳送的資料塊。這些資料塊以文字形式的元資訊 meta information,描述了報文的和含義 開頭,後面跟著可選的資料部分。http 報文在客戶端 和伺服器之間流動。二 報文的流動 1.報文流入源端伺服器 http 使用術語流入 inb...
計算機網路實踐 HTTP報文
直接訪問 http localhost 8080 瀏覽器很快返回錯誤訊息。本地主機上沒有程序在監聽8080埠,tcp鏈結建立失敗,瀏覽器很快就獲知了這一事實並返回錯誤資訊。開啟埠監聽 監聽8080埠,並在chrome遊覽器中訪問 http localhost 8080 如上,瀏覽器很快和伺服器建立了...
計算機網路之HTTP報文
http請求報文 來自使用者一封簡訊 請求報文是由客戶向伺服器傳送的,請求的伺服器服務的。既然是請求的簡訊,那就一定包含一些基本的資訊 1.1 請求行 host www.someschool.edu 首部行 connection close 首部行 user agent mozilla 5.0 首部...