HTTP協議 超文字傳輸協議 由全球資訊網制定(w3c)
是瀏覽器與伺服器通訊的應用層協議,規定了瀏覽器與伺服器之間的互動規則以及互動資料的格式資訊等。
報文
HTTP協議對於客戶端與服務端之間的互動規則有以下定義:
要求瀏覽器與服務端之間必須遵循一問一答的規則,即:瀏覽器與服務端建立TCP連線後需要先發送一個請求(問)然後服務端接收到請求並予以處理後再發送響應(答)。注意,服務端永遠不會主動給瀏覽器傳送資訊。
HTTP要求瀏覽器與服務端的傳輸層協議必須是可靠的傳輸,因此是使用TCP協議作為傳輸層協議的。
HTTP協議對於瀏覽器與服務端之間互動的資料格式,內容也有一定的要求。
瀏覽器給服務端傳送的內容稱為請求Request
服務端給瀏覽器傳送的內容稱為響應Response
http協議
請求和響應中大部分內容都是文字資訊(字串),並且這些文字資料使用的字符集為:
ISO8859-1
。這是一個歐洲的字符集,裡面是
不支援中文的
!!!。而實際上請求和響應出現的字元也就是英文,數字,符號。
請求Request
請求是瀏覽器傳送給服務端的內容,HTTP協議中一個請求由三部分構成:
分別是:請求行,訊息頭,訊息正文。訊息正文部分可以沒有。
請求部分
1:請求行
請求行是一行字串,以連續的兩個字元(回車符和換行符)作為結束這一行的標誌。
回車符:在ASC編碼中2進位制內容對應的整數是13。回車符通常用cr表示。
換行符:在ASC編碼中2進位制內容對應的整數是10。換行符通常用lf表示。
回車符和換行符實際上都是不可見字元。
請求行分為三部分:
請求方式(SP)抽象路徑(SP)協議版本(CRLF) 注:SP是空格
GET /myweb/index。html HTTP/1。1
GET / HTTP/1。1
URL地址格式:
協議://主機地址資訊/抽象路徑
http://localhost:8088/TeduStore/index
GET /TeduStore/index。html HTTP/1。1
2:訊息頭
訊息頭是瀏覽器可以給服務端傳送的一些附加資訊,有的用來說明瀏覽器自身內容,有的用來告知服務端互動細節,有的告知服務端訊息正文詳情等。
訊息頭由若干行組成,每行結束也是以CRLF標誌。
每個訊息頭的格式為:訊息頭的名字(:SP)訊息的值(CRLF)
訊息頭部分結束是以單獨的(CRLF)標誌。
//例如:Host: localhost:8088(CRLF)Connection: keep-alive(CRLF)Upgrade-Insecure-Requests: 1(CRLF)User-Agent: Mozilla/5。0 (Windows NT 10。0; Win64; x64) AppleWebKit/537。36 (KHTML, like Gecko) Chrome/79。0。3945。130 Safari/537。36(CRLF)Sec-Fetch-User: ?1(CRLF)Accept: text/html,application/xhtml+xml,application/xml;q=0。9,image/webp,image/apng;q=0。8,application/signed-exchange;v=b3;q=0。9(CRLF)Sec-Fetch-Site: none(CRLF)Sec-Fetch-Mode: navigate(CRLF)Accept-Encoding: gzip, deflate, br(CRLF)Accept-Language: zh-CN,zh;q=0。9(CRLF)(CRLF)
3:訊息正文
訊息正文是2進位制資料,通常是使用者上傳的資訊,比如:在頁面輸入的註冊資訊,上傳的附件等內容。
GET /myweb/index。html HTTP/1。1Host: localhost:8088Connection: keep-aliveUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5。0 (Windows NT 10。0; Win64; x64) AppleWebKit/537。36 (KHTML, like Gecko) Chrome/79。0。3945。130 Safari/537。36Sec-Fetch-User: ?1Accept: text/html,application/xhtml+xml,application/xml;q=0。9,image/webp,image/apng;q=0。8,application/signed-exchange;v=b3;q=0。9Sec-Fetch-Site: noneSec-Fetch-Mode: navigateAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0。91010101101001。。。。。
HTTP響應Response
響應是服務端傳送給客戶端的內容。一個響應包含三部分:狀態行,響應頭,響應正文
1:狀態行
狀態行是一行字串(CRLF結尾),並且狀態行由三部分組成,格式為:
protocol(SP)statusCode(SP)statusReason(CRLF)
協議版本
(SP)
狀態程式碼
(SP)
狀態描述
(CRLF)
狀態程式碼是一個3位數字,分為5類:
1xx:保留
2xx:成功,表示處理成功,並正常響應
3xx:重定向,表示處理成功,但是需要瀏覽器進一步請求
4xx:客戶端錯誤,表示客戶端請求錯誤導致服務端無法處理
5xx:服務端錯誤,表示服務端處理請求過程出現了錯誤
具體的數字在HTTP協議手冊中有相關的定義,可參閱。
常用狀態圖
響應頭:
響應頭與請求中的訊息頭格式一致,表示的是服務端傳送給客戶端的附加資訊。
響應正文:
2進位制資料部分,包含的通常是客戶端實際請求的資源內容。
響應的大致內容:HTTP/1。1 200 OK(CRLF)Content-Type: text/html(CRLF)Content-Length: 2546(CRLF)(CRLF)1011101010101010101……
兩個響應頭:
Content-Type是用來告知瀏覽器響應正文中的內容是什麼型別的資料(圖片,頁面等等)不同的型別對應的值是不同的,比如:
常見的媒體格式型別如下:
text/html : HTML格式
text/plain :純文字格式
text/xml : XML格式
image/gif :gif圖片格式
image/jpeg :jpg圖片格式
image/png:png圖片格式
以application開頭的媒體格式型別:
application/xhtml+xml :XHTML格式
application/xml : XML資料格式
application/atom+xml :Atom XML聚合格式
application/json : JSON資料格式
application/pdf :pdf格式
application/msword : Word文件格式
application/octet-stream : 二進位制流資料(如常見的檔案下載)
application/x-www-form-urlencoded :