深入理解HTTP協議

2022-08-23 07:39:15 字數 2657 閱讀 6559

http協議(hypertext transfer protocol)超文字傳輸協議,它是web的核心。它由兩部分程式組成:乙個客戶機程式,和乙個伺服器程式,執行在不同的端系統中,通過http報文進行通訊。

http協議定義了web客戶機如何向web伺服器請求web頁面,下圖描述了http請求-響應行為

http使用tcp作為支撐它的運輸層協議。http客戶機發起乙個與伺服器的tcp連線,一旦建立連線,瀏覽器和伺服器的程序就可以通過套接字介面訪問tcp,即客戶機和伺服器都是從套接字介面傳送和接受http請求響應報文。

伺服器向客戶機傳送請求的檔案時,並不儲存任何關於該客戶機的狀態資訊。例如,如果某個客戶機在短短的幾秒內兩次請求同乙個物件,伺服器並不會因為剛剛為該客戶機提供了該物件就不再做出反應,而是重發該物件。因為http伺服器並不儲存關於客戶機的任何資訊,所以說http是乙個無狀態協議。

(實體主體)

以上是瀏覽器訪問 www.baidu.com時的http請求報文

此行被叫做請求行,包括三個字段:方法字段、url欄位和http協議版本字段。

方法字段可以取值:get、post、head、put、delete 絕大部分都是用get

上面報文中,請求的url是 / 即請求的路徑是 / 根目錄

http/1.1:http協議版本 版本字段一般自解釋。

之後的行被稱為首部行

host: www.baidu.com    定義了目標主機名稱。也許有人會認為此行不需要,因為已經有乙個tcp連線了,但是這個首部行所提供的資訊是web**快取記憶體所需要的。

connection: keep-alive   定義了連線是長連線,即持久連線,http1.1版本缺省長連線,如需短連線,需要將此引數改為colse

referer:     referer主要用來讓伺服器判斷**頁面, 即使用者是從哪個頁面來的,通常被**用來統計使用者**,是從搜尋頁面來的,還是從其他**鏈結過來,或是從書籤等訪問,以便**合理定位.

accept-encoding: gzip, deflate, br    客戶端希望接受的資料編碼格式

accept-language: zh-cn,zh;q=0.8     客戶端希望接受的語言型別,同樣q指的是喜好程度

cookie   關於cookie 下文詳細介紹

(實體主體)

與上文中的請求報文相對應

狀態行,有三個字段:協議版本、狀態碼、響應的狀態資訊

常見狀態資訊:

200 ok  請求成功

301 moved permanently  請求物件被永久轉移

400 bed request  通用差錯**,表示請求不能被伺服器理解

404 not found  請求的文件不在伺服器上

505 http version not supported  伺服器不支援請求所用的http版本

connection: keep-alive

content-encoding: gzip

content-type: text/html; charset=utf-8    此三項解釋同請求中的。

date: mon, 23 oct 2017 07:03:01 gmt   伺服器產生並傳送該響應報文的日期和時間。這個時間不是指物件建立或者最後修改時間,而是伺服器從他的檔案系統中檢索到該物件插入到響應報文中,並發出該報文的時間

expires: mon, 23 oct 2017 07:02:04 gmt  過期時間,即伺服器告訴高速**伺服器這個副本在多長時間內是新鮮的,過了這個時間快取伺服器就會向伺服器請求,看看文件是否被修改。

set-cookie   同之前請求中的request報文中的cookie 將在下面詳細討論

之前說http伺服器是無狀態的,這樣簡化了伺服器的設計。但是乙個web伺服器,通常希望伺服器能夠識別使用者,為此,http使用了cookie,它允許伺服器追蹤使用者。

cookie技術包括四部分:

http響應報文中的cookie首部行

http請求報文中的cookie首部行

在使用者端系統中保留乙個cookie檔案,由使用者的瀏覽器管理

在web站點有乙個後端資料庫

下面用一張**釋cookie的工作原理:

深入理解HTTP協議

當今最流行的http協議版本為http 1.1,本文內容均以此版本為準 一 報文 http協議的報文分為兩種,請求報文和響應報文 請求報文由4部分組成 1.起始行 2.請求頭 3.空行 4.請求體 響應報文也由4部分組成 1.起始行 2.響應頭 3.空行 4.響應體 其中起始行都是必須的,其他內容可...

Linux 深入理解HTTP協議

基本概念及作用 首先http協議屬於應用層協議,應用層協議就是我們程式設計師自己定協議,但如果每次都自己定麻煩並且很容易出錯,所以有了一些現成的 http,dns 等,所以大多是直接拿來用就行,而應用層的作用就是雙方達成某種約定,一段按照約定的協議傳送資料,另一端按照約定來解析資料,保證接收資料的一...

HTTP 協議深入理解(一)

在 聊聊 http 協議的知識點 中介紹了 http 協議主要負責服務端和客戶端的資料傳輸,資料傳輸主要分為 2 塊 一是請求資料,客戶端向服務端請求資料 二是響應資料 服務端向客戶端響應資料,然而請求和響應都是通過請求報文和響應報文來完成的。今天我將帶大家了解 http 協議請求報文和響應報文的組...