HTTP協議的報文
1、HTTP 的報文類型
HTTP 有兩類報文:
(1) 請求報文:從客戶端發送給服務器端的報文。包括請求行、請求頭部、空行、請求體。
(2) 響應報文:服務器到客戶的回答。包括響應行、響應頭、空行、響應體。
兩種報文的結構如下圖:

HTTP 請求報文(響應報文)是由三部分組成:
1)請求行(響應報文中稱之為狀態行):包含請求方法、URL和HTTP版本
2)請求頭(響應頭): 用來說明瀏覽器、服務器或報文主體的一些信息。在每一個首部行中都有首部字段名和它的值
3)請求主體(響應主體)
2、http請求報文(請求行、請求頭、請求主體)
2.1、請求行
請求報文的 “請求行” 只有三個內容,即:方法、請求URL、以及HTTP的版本。

比如:上例中鏈接到“ 清華大學院系設置” 頁面的請求行:GET http://www.tsinghua.edu.cη/chn/yxsz/index.htm HTTP/1.1
此時,該請求報文的請求行就是:GET /chn/yxsz/index. htm HTTP /1. 1 {請求行使用了相對URL}
2.2、請求頭
瀏覽器通過請求頭告訴服務器關于瀏覽器的一些信息,格式: 請求頭名稱:請求頭值。
HTTP客戶程序(例如瀏覽器),向服務器發送請求的時候必須指明請求類型(一般是GET或者 POST),如有必要,客戶程序還可以選擇發送其他的請求頭。大多數請求頭并不是必需的,但Content-Length除外。對于POST請求來說 Content-Length必須出現。
參數介紹:
- Accept-Encoding: gzip, deflate,瀏覽器支持的壓縮編碼是 gzip 和 deflate。
- Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7,瀏覽器支持的字符編碼分別是 GB2312、utf-8 和任意字符
- Accept-Language: zh-cn,zh;q=0.5,瀏覽器支持的語言分別是中文和簡體中文
- Accept: text/html,application/xhtml+xml,application/xml,application/json,*/*,表明瀏覽器所支持接收的數據類型,表明所支持的 MIME 有:html、xhtml+xml、xml、json、任何類型
- Host: www.tsinghua.edu.cn,此行是請求頭的開始,表明發出請求的客戶端的域名
- Connection: close,告訴服務器發送完請求的文檔后就可釋放連接
- User-Agent: Mozilla/5.0,表明瀏覽器的一些版本信息
- Referer:https://www.baidu.com/ ,瀏覽器目前所處頁面的URL
- Content-type:application/json,告訴服務器我們發送的請求信息的格式

2.3、請求主體
請求主體放的是請求的參數,比如:username=aaa。GET 請求沒有請求主體,它的請求參數放在請求 URL 中:www.baidu.com?username=aaa。
若方法字段是GET,則此項為空,沒有數據。若方法字段是POST,則通常來說此處放置的就是要提交的數據。
3、http 響應報文(響應行、響應頭、響應主體)
3.1、響應行(狀態行)
響應報文的第一行就是狀態行。狀態行包括三項內容,即:HTTP的版本、狀態碼、以及解釋狀態碼的簡單短語, 比如:HTTP/1.1 200 OK。
3.1.1、狀態碼
狀態碼就是服務器告訴客戶端本次請求和響應的狀態。狀態碼(Status-Code)都是三位數字的, 分為5大類共33種:
- 1xx:表示成功接收請求,需要客戶端繼續提交下一次請求才能完成整個處理過程。服務器已接收到請求,但沒有接收完全,在等待一段時間后,給客戶端發送狀態碼,要求客戶繼續發送請求。
- 2xx:表示成功,成功接收請求并已完成整個處理過程。
- 3xx:表示重定向, 如要完成請求還必須采取進一步的行動。例如:請求的資源已經移動一個新地址,常用302(意味著你請求我,我讓你去找別人,瀏覽器將自動請求服務器返回的資源路徑),307和304(我不給你這個資源,自己拿緩存)
- 4xx:表示客戶的差錯, 如沒有權限訪問,訪問路徑錯誤資源不存在。
- 5xx:表示服務器的差錯, 如服務器失效無法完成請求。
常見的狀態碼:200 請求成功,302 重定向,304 頁面緩存,403 沒有權限訪問,404 頁面不存在,500 后端程序報錯
具體的狀態碼查看:http://www.runoob.com/http/http-status-codes.html
3.2、響應頭
響應頭用于描述服務器的基本信息,以及數據的描述,服務器通過這些數據的描述信息,可以通知客戶端如何處理等一會兒它回送的數據。
常見的響應頭字段含義:

3.3、響應體
響應體就是響應的消息體,如果是純數據就是返回純數據,如果請求的是HTML頁面,那么返回的就是HTML代碼,如果是JS就是JS代碼,如此之類。
4、Content-Type 字段各個值的含義
get 請求的 headers 中是沒有 content-type 這個字段的。content-type 是用來指定消息體的格式的,get 請求一般沒有消息體,所以,get 請求一般不用設置 content-type。
4.1、請求頭的Content-Type
Content-Type:MediaType,互聯網媒體類型,也叫做MIME類型。在 Http 請求頭中,使用Content-Type來告訴服務器我們發送的請求信息的格式。
常見值:
- application/x-www-form-urlencoded:瀏覽器用表單 POST 方式請求提交數據時默認的編碼方式。比如:Content-Type: application/x-www-form-urlencoded;charset=utf-8
- multipart/form-data:另一種 POST 方式提交數據的編碼。我們在使用表單上傳文件時,必須讓 form 的 enctyped 等于這個值。
- application/json:用來告訴服務端消息主體是序列化后的 JSON 字符串。比如:
POST http://www.example.com HTTP/1.1 Content-Type: application/json;charset=utf-8 {"title":"測試","content":"測試內容"}
- text/xml:XML 作為編碼方式
application/x-www-form-urlencoded 和 multipart/form-data兩種 POST 數據的方式,都是瀏覽器原生支持的,而且現階段原生 form 表單也只支持這兩種方式。但是隨著越來越多的 Web 站點,尤其是 Web/App,全部使用 Ajax 進行數據交互之后,我們完全可以定義新的數據提交方式,給開發帶來更多便利。
4.2、響應頭的Content-Type
響應頭中content-type常用的類型:
- 文本類型 text/plain
- html類型 text/html
- css類型 text/css
- js類型 application/x-javascript
- json類型 application/json
- 圖片類型 image/png image/jpg
5、HTTP協議各個版本的比較(http0.9、1.0、1.1、2.0)
參考:http://www.rzrgm.cn/andashu/p/6441271.html#top
https://blog.csdn.net/qq_22238021/article/details/81197157

浙公網安備 33010602011771號