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.1
Host: localhost:8088
Connection: keep-alive
Upgrade-Insecure-Requests: 1
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
Sec-Fetch-User: ?1
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
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
1010101101001.....
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 : <form encType=””>中默認的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 要更耗費服務器資源。
https與http
UDP協議和TCP協議都是傳輸層的協議,TCP協議提供可靠的通信傳輸,而UDP則是常常被用于讓廣播和細節控制的交給應用的通信傳輸
tcp與udp
學習記錄,如有侵權請聯系刪除