Http 協議小結

2021-07-23 10:23:26 字數 1462 閱讀 8085

1. 請求行,狀態行只有一行

2. 訊息頭由只有乙個部分

3. 訊息頭與實體之間通過空行隔開(\r\n)

4. 可以存在多個實體部分,實體之間通過空行分開(在content-type: multipart/form-data的型別當中)

5.連續兩個\r\n只是乙個部分的分隔符

6. 訊息頭,實體頭的格式

1. ***x:《空格》 yyy,uuu <\r><\n>

如accept:  text/html,image/*

2.***x:《空格》yyy;aa= 《空格》 bbb<\r><\n>

content-dispostion: attachment; filename=aa.zip

3.***x: 空格 ccc=zzz; 《空格》ii= ooo <\r><\n>

cookie:  uuid_t=9988778; un=px348402717

7. 在請求當中傳遞自定字段的方式

1. 在訊息頭當中

2. 在form表單當中,method=get時,存放在url ? ***=ddd&ss=ww

3. 在form表單當中,method=post時,且訊息頭的content-type:multipar/form-data存放在實體頭當中,

content-dispostion:form-data;name=」user」

在實體當中的格式

para1=abc¶m2=***y

8. web 伺服器與socket之間的關係

1. accept 迴圈

server對於connection不需要專門的維護與管理,使用玩就可以關閉

2. connection迴圈

socket –> buffer –> serialization->bussiness

bussiness其是直接使用utf-8編碼,沒有使用類似 google protobuf.這樣在解碼編碼的時候會簡單一些。推論:不是字串就是二進位制資料,這樣方便處理,如表單上傳檔案,客戶端先完整傳送表單,然後再寫入二進位制資料,伺服器在解析時候,根據寫入資料的順序,以\r\n做為tcp分包的標識。

依次解析請求行,訊息頭,這些是byte 直接按utf-8轉換成字串,然後根據content-type,content-length,transfer-encoding等之類來讀取實體資料。

核心: 以純二進位製流的概念來讀取資料,讀取快取當中,然後\r\n分包,轉換成字串,再根據情況判斷客戶端傳送資料的方式,以對應的方式接收資料。

這樣就很好支援,一會寫入訊息頭之類的字串資料,一會寫入檔案之的二進位制資料。我們均將其以byte處理。且因為client在connection上是按請求響應這樣的流程寫入資料,不會在流程當中寫入其他的,或重複訊息頭資料。

HTTP協議小結

應答頭 說明allow 伺服器支援哪些請求方法 如get post等 content encoding content length 表示內容長度。只有當瀏覽器使用持久http連線時才需要這個資料。如果你想要利用持久連線的優勢,可以把輸出文件寫入bytearrayoutputstram,完成後檢視其...

HTTP協議小結

todo 補充細節 三次握手 1.傳送端 標有syn的資料報 接收端 2.接收端 標有syn ack的資料報 傳送端 3.傳送端 標有ack的資料報 接收端 http協議是無狀態的,為了儲存狀態引入了cookies get用來請求已經被url識別的資源。伺服器解析後就返回。比如請求文字就原樣返回,要...

超文字傳輸協議HTTP小結

http hyper text transfer protocol 超文字傳輸協議 1 url uniform resource locator 統一資源定位符,也稱web位址 格式 協議 主機網域名稱 ip位址 埠號 目錄檔案 檔名 協議 表示網際網路資源型別 http 表示www伺服器 ftp ...