HTTP
HTTP是什么
HTTP("全程超文本協(xié)議")是一種應用非常廣泛的應用層協(xié)議.
文本:字符串(能在utf8/gbk)碼表上找到合法字符.
超文本:不僅是字符串,還能攜帶圖片啥的(HTML).
富文本:類似于word文檔這種.
HTTP誕生于1991年.目前已經發(fā)展為最主流使用的一種應用層協(xié)議.
?
實際上HTTP/1.1是目前使用最廣泛的HTTP協(xié)議版本,之后的討論也以HTTP1.1為主.
HTTP往往是基于傳輸層的TCP協(xié)議實現(xiàn)的.(HTTP1.0,HTTP1.1,HTTP2.0均屬于TCP,HTTP3.0基于UDP實現(xiàn)).
我們平時打開一個網站,就是通過HTTP協(xié)議來傳輸數據的.
當我們在瀏覽器中輸入一個搜狗搜索的"網址"(URL)時,瀏覽器就給搜狗的服務器發(fā)送了一個HTTP請求,搜狗的服務器返回了一個HTTP響應.(瀏覽器和服務器之間傳輸數據)
這個響應結果被瀏覽器解析之后,就展示成我們看到的頁面內容.(這個過程瀏覽器可能給服務器發(fā)送多個HTTP請求,服務器會對應返回多個響應,這些響應里就包含了頁面HTML,CSS,JavaScript,(前端開發(fā)三劍客)圖片,字體等信息).?
理解"應用層協(xié)議"
我們之前講過TCP/IP,已經知道目前數據能從客戶端進程經過路徑選擇跨網絡傳送到服務器端進程[IP + Port].
可是,僅僅把數據從A點傳送到B點就完了嗎?
?這就好比,在淘寶上買了一部手機,賣家[客戶端]把手機通過順豐[傳送 + 路徑選擇]送到買家[服務器]手里就完了嗎?
不是的,買家還要使用這款產品,使用完之后也可能要給賣家打分評論.
所以,我們把數據從A端傳送到B端,TCP/IP解決的是順豐的功能,而兩端還要對數據進行加工處理或者使用,所以我們還需要一層協(xié)議,不關心通信細節(jié),關心應用細節(jié)!?
這層協(xié)議叫做應用層協(xié)議.而是用是有不同場景的,所有應用層協(xié)議是不同種類的,其中經典協(xié)議之一的HTTP就是其中的佼佼者.
理解HTTP協(xié)議的工作過程
當我們在瀏覽器中輸入一個"網址",此時瀏覽器就會給對應的服務器發(fā)送一個HTTP請求.對方服務器收到這個請求之后,經過計算處理,就會返回一個HTTP響應.(一問一答)
?
?但是,在類似于消息推送等場景時,需要服務器主動給瀏覽器發(fā)送消息,這里HTTP就難以勝任了.
應用層這里還提供了一個和HTTP搭配的協(xié)議,websocket(HTTP的跟班,針對HTTP能力進行補充的).
HTTP協(xié)議格式
HTTP是一個文本格式的協(xié)議.通過抓包工具進行抓包,分析HTTP請求/響應的細節(jié).
抓包工具的使用
以Fidder為例.(下載:https://www.telerik.com/fiddler/)
如果安裝配置ok,fiddler就能抓到很多數據包,打開一個網站,其實瀏覽器和服務器之間的HTTP交互不是只有一次,而是多次.經過反復拉扯,才能頁面獲取.
左側窗口顯示了所有HTTP請求/響應,可以選中查看詳細.
右側上方顯示了HTTP的報文內容.(切換到Raw標簽頁可以查看詳細的數據格式)
右側下方顯示了HTTP的報文內容.(切換到Raw標簽頁可以查看詳細的數據格式)
請求和響應的詳細數據,可以通過右下角的View in Notepad通過記事本打開.
可以使用ctrl+a全選左側的抓包結果,delete鍵刪除所有的被選中結果.
抓包工具的原理
對了,在使用fiddler之前,還需要關閉電腦上其它的代理程序.因為Fiddler也是個代理程序,可能會與其它的程序出現(xiàn)沖突.
代理分成兩種: 1.正向代理(是客戶端的代言人)? 2.反向代理(是服務器的代言人)
代理就可以簡單理解為跑腿小弟.你想買罐冰可樂,又不想下樓去超市,那么就可以把錢給你的跑腿小弟(正向代理),跑腿小弟來到超市把錢給超市老板(老板也可能不想看店,讓兒子看店(反向代理)),再把冰可樂拿回來交到你的手上.這個過程中,這個跑腿小弟對于"你"和"超市老板"的交易細節(jié),是非常清楚的.?
抓包結果
HTTP請求:
?
首行:[方法] + [url] + [版本]
Header:請求的屬性,冒號分割的鍵值對;每組屬性之間用\n分隔;? 遇到空行表示Header部分結束
Body(http載荷部分):空行后面的內容都是Body.Body允許為空字符串.如果Body存在,則在Header中會有一個Content-Length來標識Body的長度;(有的http請求有body,有的沒有)?
HTTP響應:
?
?首行:[版本號] + [狀態(tài)碼] + [狀態(tài)碼解釋](請求成功/失敗)
Header:請求的屬性,冒號分隔的鍵值對;每組屬性之間使用\n分隔;遇到空行表示Header結束
Body:空行后面的內容都是body.Body允許為空字符串.如果Body存在,則在Header中會有一個Content-Length屬性來標識Body的長度;如果服務器返回了一個html頁面,那么html頁面內容就是在body中.
協(xié)議格式總結
思考問題:為什么HTTP報文中要存在"空行"?
因為HTTP協(xié)議中并沒有規(guī)定報頭部分的鍵值對有多少個.空行就是"報頭結束的標記",或者是"報頭和正文之間的分隔符".文章來源:http://www.zghlxwxcb.cn/news/detail-825546.html
HTTP在傳輸層依賴TCP協(xié)議,TCP是面向字節(jié)流的.如果沒有這個空行,就會出現(xiàn)"粘包問題".?文章來源地址http://www.zghlxwxcb.cn/news/detail-825546.html
到了這里,關于網絡原理 - HTTP/HTTPS(1)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!