Http超文字傳輸協議

HTTP協議 超文字傳輸協議 由全球資訊網制定(w3c)

是瀏覽器與伺服器通訊的應用層協議,規定了瀏覽器與伺服器之間的互動規則以及互動資料的格式資訊等。

Http超文字傳輸協議

報文

HTTP協議對於客戶端與服務端之間的互動規則有以下定義:

要求瀏覽器與服務端之間必須遵循一問一答的規則,即:瀏覽器與服務端建立TCP連線後需要先發送一個請求(問)然後服務端接收到請求並予以處理後再發送響應(答)。注意,服務端永遠不會主動給瀏覽器傳送資訊。

HTTP要求瀏覽器與服務端的傳輸層協議必須是可靠的傳輸,因此是使用TCP協議作為傳輸層協議的。

HTTP協議對於瀏覽器與服務端之間互動的資料格式,內容也有一定的要求。

瀏覽器給服務端傳送的內容稱為請求Request

服務端給瀏覽器傳送的內容稱為響應Response

Http超文字傳輸協議

http協議

請求和響應中大部分內容都是文字資訊(字串),並且這些文字資料使用的字符集為:

ISO8859-1

。這是一個歐洲的字符集,裡面是

不支援中文的

!!!。而實際上請求和響應出現的字元也就是英文,數字,符號。

請求Request

請求是瀏覽器傳送給服務端的內容,HTTP協議中一個請求由三部分構成:

分別是:請求行,訊息頭,訊息正文。訊息正文部分可以沒有。

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協議手冊中有相關的定義,可參閱。

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 :

中預設的encType,form表單資料被編碼為key/value格式傳送到伺服器(表單預設的提交資料的格式)

get和post的區別

GET提交的資料會放在URL之後,以‘?’分割URL和傳輸資料,引數之間以&相連,如EditPosts。aspx?name=test1&id=123456。 POST方法是把提交的資料放在HTTP包的Body中。

GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制。

GET方式需要使用Request。QueryString來取得變數的值,而POST方式透過Request。Form來獲取變數的值。

GET方式提交資料,會帶來安全問題,比如一個登入頁面,透過GET方式提交資料時,使用者名稱和密碼將出現在URL上,如果頁面可以被快取或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該使用者的賬號和密碼。

HTTP 與 HTTPS 區別

HTTP 明文傳輸,資料都是未加密的,安全性較差,HTTPS(SSL+HTTP) 資料傳輸過程是加密的,安全性較好。

使用 HTTPS 協議需要到 CA(Certificate Authority,數字證書認證機構) 申請證書,一般免費證書較少,因而需要一定費用。證書頒發機構如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。

HTTP 頁面響應速度比 HTTPS 快,主要是因為 HTTP 使用 TCP 三次握手建立連線,客戶端和伺服器需要交換 3 個包,而 HTTPS除了 TCP 的三個包,還要加上 ssl 握手需要的 9 個包,所以一共是 12 個包。

http 和 https 使用的是完全不同的連線方式,用的埠也不一樣,前者是 80,後者是 443。

HTTPS 其實就是建構在 SSL/TLS 之上的 HTTP 協議,所以,要比較 HTTPS 比 HTTP 要更耗費伺服器資源。

Http超文字傳輸協議

https與http

UDP協議和TCP協議

都是傳輸層的協議,TCP協議提供可靠的通訊傳輸,而UDP則是常常被用於讓廣播和細節控制的交給應用的通訊傳輸

Http超文字傳輸協議

tcp與udp

學習記錄,如有侵權請聯絡刪除