自定義http報頭 HTTP報文

2021-10-19 06:41:42 字數 1729 閱讀 9577

超文字傳輸協議

http協議在規範文件裡詳細定義了報文的格式,規定了組成部分,解析規則,還有處理策略,所以可以在 tcp/ip層之上實現更靈活豐富的功能,例如連線控制,快取管理、資料編碼、內容協商等等。

報文結構

拿tcp報文來舉例,它在實際要傳輸的資料之前附加了乙個20位元組 的頭部資料,儲存tcp協議必須的額外資訊,例如傳送方的埠號、接收方的埠號、包序號、標誌位等等。有了這個附加的tcp頭,資料報才能夠正確傳輸,到了目的地後把頭部去掉,就可以拿到真正的資料。

tcp報文

http協議也是與tcp/udp類似,同樣也需要在實際傳輸的資料前附加一些頭資料,不過與tcp/udp不同的 是,它是乙個「純文字」的協議,所以頭資料都是ascii碼的文字.

image-20210126171437863

http協議的請求報文和響應報文的結構基本相同,由三大部分組成:

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

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

這其中前兩部分起始行和頭部字段經常又合稱為「請求頭」或「響應頭」,訊息正文又稱為「實體」,但與「header」對應,很多時候就直接稱為「body」。

http協議規定報文必須有header,但可以沒有body,而且在header之後必須要有乙個「空行」,也就 是「crlf」,十六機制的「0d0a」。

image-20210126171911271

請求行request line

image-20210126172410083

了解了http報文的基本結構後,我們來看看請求報文裡的起始行也就是請求行(request line),它簡要地描述了客戶端想要如何操作伺服器端的資源。

請求行由三部分構成:

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

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

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

這三個部分通常使用空格(space)來分隔,最後要用crlf換行表示結束。

image-20210126172306884

狀態行status line

image-20210126172632776

看完了請求行,我們再看響應報文裡的起始行,在這裡它不叫「響應行」,而是叫「狀態行」(status line),意思是伺服器響應的狀態。

比起請求行來說,狀態行要簡單一些,同樣也是由三部分構成:

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

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

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

image-20210126172648687

頭部字段

header fields

image-20210126172745942

請求行或狀態行再加上頭部字段集合就構成了http報文裡完整的請求頭或響應頭

image-20210126172822683

image-20210126172841662

頭部欄位是key-value的形式,key和value之間用「:」分隔,最後用crlf換行表示字段結束。比如在「host: 127.0.0.1」這一行裡key就是「host」,value就是「127.0.0.1」。http頭欄位非常靈活,不僅可以使用標準裡的host、connection等已有頭,也可以任意新增自定義頭,這 就給http協議帶來了無限的擴充套件可能。

自定義 HTTP 模組

在響應下面兩個事件時呼叫該模組 事件和 事件。這使該模組可以在處理頁請求之前和之後執行。在這種情況下,該模組向請求的 asp.net 網頁的任一 http 請求開頭處新增一條訊息,並在處理請求後新增另一條訊息。在建立完 helloworldmodule 類後,可以通過在 web.config 檔案中...

http請求報頭

請求報頭的讀取 request.getheader string 但是每次讀取都要判斷是否為null,如果為null,那麼就有預設的處理 報頭對應很多屬性,並且都有對應的讀取方法。getcookies getauthtype getcontentlength getcontenttype gethe...

FastCGI處理自定義HTTP頭

fcgx中,自定義頭可以獲取環境變數獲得。但是名字前面要加入http 字母全部大寫,例如 自定義頭username,在fastcgi的fcgx中,變為 http username。可以用fcgx getparam獲取單個環境變數。頭資訊在fcgx request envp中,可以全部列印出來 cha...