不一樣的HTTP 六

2021-10-25 15:01:46 字數 3022 閱讀 2115

tcp/udp的報文

http的報文

起始行(start line):描述請求或響應的基本資訊;

頭部字段集合(header):使用 key-value 形式更詳細地說明報文;

抓包資訊

請求方法:是乙個動詞,如 get/post,表示對資源的操作;

請求目標:通常是乙個 uri,標記了請求方法要操作的資源;

版本號:表示報文使用的 http 協議版本。

版本號:表示報文使用的 http 協議版本;

狀態碼:乙個三位數,用**的形式表示處理的結果,比如 200 是成功,500 是伺服器錯誤;

原因:作為數字狀態碼補充,是更詳細的解釋文字,幫助人理解原因。

欄位名不區分大小寫,例如「host」也可以寫成「host」,但首字母大寫的可讀性更好;

欄位名裡不允許出現空格,可以使用連字元「-」,但不能使用下劃線「_」。例如,「test-name」是合法的欄位名,而「test name」「test_name」是不正確的欄位名;

欄位名後面必須緊接著「:」,不能有空格,而「:」後的字段值前可以有多個空格;

欄位的順序是沒有意義的,可以任意排列不影響語義;

字段原則上不能重複,除非這個字段本身的語義允許,例如 set-cookie。

通用字段:在請求頭和響應頭里都可以出現;

請求字段:僅能出現在請求頭里,進一步說明請求資訊或者額外的附加條件;

響應字段:僅能出現在響應頭里,補充說明響應報文的資訊;

實體字段:它實際上屬於通用字段,但專門描述 body 的額外資訊。

host字段,它屬於請求字段,只能出現在請求頭里,它同時也是唯一乙個 http/1.1 規範裡要求必須出現的字段,也就是說,如果請求頭里沒有 host,那這就是乙個錯誤的報文。

user-agent是請求字段,只出現在請求頭里。它使用乙個字串來描述發起 http 請求的客戶端,伺服器可以依據它來返回最合適此瀏覽器顯示的頁面。 

date欄位是乙個通用字段,但通常出現在響應頭里,表示 http 報文建立的時間,客戶端可以使用這個時間再搭配其他字段決定快取策略。

server欄位是響應字段,只能出現在響應頭里。它告訴客戶端當前正在提供 web 服務的軟體名稱和版本號。 

content-length,它表示報文裡 body 的長度,也就是請求頭或響應頭空行後面資料的長度。伺服器看到這個字段,就知道了後續有多少資料,可以直接接收。如果沒有這個字段,那麼 body 就是不定長的,需要使用 chunked 方式分段傳輸。 

head:獲取資源的元資訊;

post:向資源提交資料,相當於寫入或上傳資料;

put:類似 post;

delete:刪除資源;

connect:建立特殊的連線隧道;

options:列出可對資源實行的方法;

trace:追蹤請求 - 響應的傳輸路徑。

get方法應該是 http 協議裡最知名的請求方法了,也應該是用的最多的,自 0.9 版出現並一直被保留至今,是名副其實的「元老」。

head方法與 get 方法類似,也是請求從伺服器獲取資源,伺服器的處理機制也是一樣的,但伺服器不會返回請求的實體資料,只會傳回響應頭,也就是資源的「元資訊」。

delete方法指示伺服器刪除資源,因為這個動作危險性太大,所以通常伺服器不會執行真正的刪除操作,而是對資源做乙個刪除標記。當然,更多的時候伺服器就直接不處理 delete 請求。

connect是乙個比較特殊的方法,要求伺服器為客戶端和另一台遠端伺服器建立一條特殊的連線隧道,這時 web 伺服器在中間充當了**的角色。

options方法要求伺服器列出可對資源實行的操作方法,在響應頭的 allow 欄位裡返回。它的功能很有限,用處也不大,有的伺服器(例如 nginx)乾脆就沒有實現對它的支援。

trace方法多用於對 http 鏈路的測試或診斷,可以顯示出請求 - 響應的傳輸路徑。它的本意是好的,但存在漏洞,會洩漏**的資訊,所以 web 伺服器通常也是禁止使用。

在 http 協議裡,所謂的「安全」是指請求方法不會「破壞」伺服器上的資源,即不會對伺服器上的資源造成實質的修改。

所謂的「冪等」實際上是乙個數學用語,被借用到了 http 協議裡,意思是多次執行相同的操作,結果也都是相同的,即多次「冪」後結果「相等」。

很顯然,get 和 head 既是安全的也是冪等的,delete 可以多次刪除同乙個資源,效果都是「資源不存在」,所以也是冪等的。

post 和 put 的冪等性質就略費解一點。

按照 rfc 裡的語義,post 是「新增或提交資料」,多次提交資料會建立多個資源,所以不是冪等的;而 put 是「替換或更新資料」,多次更新乙個資源,資源還是會第一次更新的狀態,所以是冪等的。

不一樣的HTTP(一)

uri 即統一資源識別符號,作為網際網路上資源的唯一身份 http 即超文字傳輸協議,用來傳輸超文字。只允許用 get 動作從伺服器上獲取 html 文件,並且在響應請求之後立即關閉連線,功能非常有限 增加了 head post 等新方法 增加了響應狀態碼,標記可能的錯誤原因 引入了協議版本號概念 ...

不一樣的HTTP 二

一.http是什麼?1.首先,http 是乙個協議。不過,協議又是什麼呢?第一點,協議必須要有兩個或多個參與者,也就是 協 第二點,協議是對參與者的一種行為約定和規範,也就是 議 http 是乙個用在計算機世界裡的協議。它使用計算機能夠理解的語言確立了一種計算機之間交流通訊的規範,以及相關的各種控制...

不一樣的HTTP 三

cdn,全稱是 content delivery network 翻譯過來就是 內容分發網路 它應用了 http 協議裡的快取和 技術,代替源站響應客戶端的請求。爬蟲 crawler 實際上是一種可以自動訪問 web 資源的應用程式。html是 http 協議傳輸的主要內容之一,它描述了超文字頁面,...