系列綜述:
??目的:本系列是個(gè)人整理為了秋招工作面試
的,整理期間苛求每個(gè)知識(shí)點(diǎn),平衡理解簡易度與深入程度。
??來源:材料主要源于小林Codeing
進(jìn)行的,每個(gè)知識(shí)點(diǎn)的修正和深入主要參考各平臺(tái)大佬的文章,其中也可能含有少量的個(gè)人實(shí)驗(yàn)自證。
??結(jié)語:如果有幫到你的地方,就點(diǎn)個(gè)贊和關(guān)注一下唄,謝謝??????!??!
??【C++】秋招&實(shí)習(xí)面經(jīng)匯總篇
??點(diǎn)此到文末驚喜??
HTTP
基本概念
- 定義:HTTP協(xié)議是一個(gè)超文本傳輸協(xié)議,處于TCP/IP協(xié)議體系的應(yīng)用層
- 萬維網(wǎng)WWW
- 定義:因特網(wǎng)中的Web服務(wù)資源空間,因特網(wǎng)還包含其他服務(wù),如電子郵件服務(wù),F(xiàn)TP等等
- 組成
- 統(tǒng)一資源定位符URL:標(biāo)記萬維網(wǎng)的各種資源,形式為
協(xié)議 :// 主機(jī) : 端口 / 路徑
- 超文本傳輸協(xié)議HTTP:使用TCP連接進(jìn)行可靠傳輸?shù)膽?yīng)用層協(xié)議
- 超文本標(biāo)記語言HTML:Web頁面的數(shù)據(jù)和格式的描述語言
- 統(tǒng)一資源定位符URL:標(biāo)記萬維網(wǎng)的各種資源,形式為
- HTTP協(xié)議特點(diǎn)
- 簡單:報(bào)文格式是
header + body
,頭部信息也是key-value
形式 - 靈活:協(xié)議字段沒有嚴(yán)格要求,允許自定義和和擴(kuò)充。HTTP協(xié)議工作在應(yīng)用層,下層可以任意變化。
- 應(yīng)用廣泛,生態(tài)完整
- 不安全
-
無狀態(tài)連接導(dǎo)致重復(fù)的身份驗(yàn)證
,可通過cookie/session機(jī)制
解決 -
明文傳輸導(dǎo)致信息容易泄漏
,可通過引入SSL/TLS 層
解決
-
- 簡單:報(bào)文格式是
- HTTP協(xié)議的發(fā)展
- HTTP1.0
-
無狀態(tài):服務(wù)器
不保存任何客戶端信息
。無法進(jìn)行動(dòng)態(tài)交互,可以通過cookie/session進(jìn)行身份認(rèn)證和狀態(tài)保存 -
非持久連接:每次連接
客戶端發(fā)出請求
,服務(wù)器收到響應(yīng)
后便立即關(guān)閉連接。無法復(fù)用連接,每次TCP連接釋放開銷大。 -
有序連接(隊(duì)頭阻塞問題):下一個(gè)請求必須在前一個(gè)請求響應(yīng)到達(dá)之后才能發(fā)送,若有請求一直未響應(yīng),則后面請求會(huì)被
阻塞
。
-
無狀態(tài):服務(wù)器
- HTTP1.1
- 持久連接:
一次TCP連接
,能進(jìn)行多次請求-響應(yīng)
- 管道化:客戶端能
并發(fā)
的發(fā)送多個(gè)請求,服務(wù)端按序串行發(fā)送響應(yīng)。解決了發(fā)送端的隊(duì)頭阻塞,但是服務(wù)端可能導(dǎo)致隊(duì)頭阻塞。 - 斷點(diǎn)續(xù)傳:HTTP消息頭使用分塊傳輸編碼,將實(shí)體主體分塊傳輸
- 持久連接:
- HTTP2.0:在HTTP和SSL協(xié)議間增加SPDY,以增強(qiáng)HTTP協(xié)議功能
- 多路復(fù)用:將多個(gè)HTTP請求和響應(yīng)進(jìn)行二進(jìn)制分幀并分配給不同的流,最后通過同一個(gè)TCP進(jìn)行傳輸,在傳輸過程中,每個(gè)流都可以被獨(dú)立地流量控制和優(yōu)先級控制。
- 服務(wù)器推送:服務(wù)器主動(dòng)推送給客戶端靜態(tài)資源,客戶端進(jìn)行緩存
- 首部壓縮:通過靜態(tài)字典、動(dòng)態(tài)字典和哈夫曼編碼進(jìn)行
- 靜態(tài)字典:存儲(chǔ)常見頭部鍵值對,傳輸時(shí)頭部簡寫成對應(yīng)靜態(tài)字典中的index
- 動(dòng)態(tài)字典:通過連接上下文進(jìn)行更新,需要為每個(gè) HTTP/2 連接維護(hù)不同的字典
- 哈夫曼編碼:根據(jù)使用頻率進(jìn)行非等長編碼
- TCP帶來的瓶頸:在出現(xiàn)丟包的額情況下,整個(gè)TCP都要開始等待重傳,導(dǎo)致后面的所有數(shù)據(jù)都被阻塞
- HTTP3.0
- 使用基于UDP的QUIC協(xié)議:一個(gè)連接上的多個(gè)stream之間沒有依賴,即使丟包,只需要重發(fā)丟失的包即可,不需要重傳整個(gè)連接。
- 更好的移動(dòng)端表現(xiàn):TCP是基于IP識(shí)別連接,而QUIC是通過ID識(shí)別鏈接。 無論網(wǎng)絡(luò)環(huán)境如何變化,只要ID不變,就能迅速重新連上
- 加密認(rèn)證的根文:所有報(bào)文頭部都是經(jīng)過認(rèn)證的,報(bào)文Body都是經(jīng)過加密的。
- 向前糾錯(cuò)機(jī)制:每個(gè)數(shù)據(jù)包除了它本身的內(nèi)容之外還包括了其他數(shù)據(jù)包的數(shù)據(jù),因此少量的丟包可以通過其他包的冗余數(shù)據(jù)直接組裝而無需重傳。
- 連接遷移:不再用tcp四元組確定一個(gè)連接,而是用一個(gè)64位隨機(jī)數(shù)來確定這個(gè)連接
- HTTP1.0
- 鼠標(biāo)點(diǎn)擊URL發(fā)生的事件及每層傳輸用到的協(xié)議
- 流程
- 瀏覽器分析鏈接指向的URL
- 瀏覽器向DNS請求解析該域名的IP地址
- 域名系統(tǒng)DNS解析出該域名服務(wù)器的IP
- 瀏覽器與該服務(wù)器建立TCP鏈接(默認(rèn)端口為80)
- 瀏覽器發(fā)出HTTP的GET請求
- 服務(wù)器響應(yīng)HTTP把文件index.htm發(fā)送給瀏覽器
- TCP鏈接釋放
- 瀏覽器解析HTML文件并進(jìn)行布局渲染
- 應(yīng)用層:HTTP:超文本傳輸協(xié)議,DNS:域名解析服務(wù)
- 傳輸層:TCP:為HTTP提供可靠的數(shù)據(jù)傳輸,UDP:DNS使用UDP進(jìn)行傳輸
- 網(wǎng)絡(luò)層:IP:IP數(shù)據(jù)報(bào)的傳輸和路由選擇,ICMP:提供網(wǎng)絡(luò)傳輸?shù)牟铄e(cuò)檢測,ARP:將本機(jī)的默認(rèn)網(wǎng)關(guān)IP地址映射成MAC地址
- 數(shù)據(jù)鏈路層:PPP協(xié)議
- 流程
- HTTP 常見的狀態(tài)碼有哪些?
-
1xx提示碼
:屬于提示信息,表示協(xié)議處理的一種中間狀態(tài) -
2xx成功碼
:成功,表示服務(wù)器成功處理了客戶端的請求報(bào)文-
200 OK
:成功有數(shù)據(jù),表示服務(wù)器正常返回的響應(yīng)頭含有body數(shù)據(jù) -
204 No Content
:成功無數(shù)據(jù),但是表示響應(yīng)頭中無body數(shù)據(jù) -
206 Partial Content
:斷點(diǎn)續(xù)傳的部分成功,表示響應(yīng)中的body數(shù)據(jù)只是所有數(shù)據(jù)的一部分
-
-
3xx重定向碼
:表示客戶端請求的資源地址發(fā)生變動(dòng),需要客戶端用新的 URL 重新發(fā)送請求獲取資源,也就是重定向。-
301 Moved Permanently
:表示永久重定向
,說明請求的資源已經(jīng)不存在了,需改用新的 URL 再次訪問。 -
302 Found
:表示臨時(shí)重定向
,說明請求的資源還在,但暫時(shí)需要用另一個(gè) URL 來訪問。 -
304 Not Modified
:不具有跳轉(zhuǎn)的含義,表示資源未修改,重定向到緩存文件
-
-
4xx錯(cuò)誤碼
:表示客戶端發(fā)送的報(bào)文有誤,服務(wù)器無法處理-
400 Bad Request
:表示客戶端請求的報(bào)文有錯(cuò)誤,但只是個(gè)籠統(tǒng)的錯(cuò)誤。 -
403 Forbidden
:表示服務(wù)器禁止訪問資源,并不是客戶端的請求出錯(cuò)。 -
404 Not Found
:服務(wù)器沒找到這個(gè)請求的資源,所以無法提供給客戶端。
-
-
5xx服務(wù)端錯(cuò)誤
:表示客戶端請求報(bào)文正確,但是服務(wù)器處理時(shí)內(nèi)部發(fā)生了錯(cuò)誤-
500 Internal Server Error
:籠統(tǒng)的通用錯(cuò)誤碼 -
501 Not Implemented
:表示客戶端請求的功能目前不支持 -
502 Bad Gateway
:通常是服務(wù)器作為網(wǎng)關(guān)或代理時(shí)返回的錯(cuò)誤碼,表示服務(wù)器自身工作正常,訪問后端服務(wù)器發(fā)生了錯(cuò)誤。 -
503 Service Unavailable
:表示服務(wù)器當(dāng)前很忙,請稍后重試
-
-
- HTTP協(xié)議的常見字段
- Host字段:客戶端請求報(bào)文中用來
指定服務(wù)器域名
- Content-Length字段:服務(wù)器響應(yīng)報(bào)文中,表示
本次回應(yīng)的數(shù)據(jù)長度
- Connection字段:常用于客戶端要求服務(wù)器使用「HTTP 長連接」機(jī)制,長連接通過握手建立連接后可以多次請求-響應(yīng),直到通過四次揮手?jǐn)嚅_連接
- Content-Type 字段:用于服務(wù)器響應(yīng)報(bào)文,告訴客戶端本次數(shù)據(jù)編碼格式
- Content-Encoding 字段:指明數(shù)據(jù)的壓縮格式
- Host字段:客戶端請求報(bào)文中用來
- HTTP通過TCP協(xié)議進(jìn)行傳輸?shù)摹罢嘲眴栴}的解決
- 設(shè)置指定字符作為 HTTP header 的邊界
- 通過 Content-Length 字段標(biāo)識(shí)報(bào)文長度
- GET和POST的區(qū)別
- 請求目的不同:GET是
從服務(wù)器獲取
數(shù)據(jù),而POST是向服務(wù)器提交
數(shù)據(jù)。 - 請求方式不同:GET請求將數(shù)據(jù)
附加在URL的末尾
作為查詢參數(shù)發(fā)送(安全性低),而POST請求將數(shù)據(jù)包含在請求的正文
中。 - 長度限制:GET的
請求參數(shù)長度有限制
,而POST請求則沒有這個(gè)限制。 - 能否緩存:GET請求可以被緩存,而POST請求不會(huì)。
- 請求目的不同:GET是
- HTTP協(xié)議中安全和冪等的概念
- 安全:請求方法不會(huì)破壞服務(wù)器上的資源
- 冪等:多次執(zhí)行相同的操作,結(jié)果都是相同的
緩存技術(shù)
- 原理:將請求-響應(yīng)的數(shù)據(jù)緩存到本地,下次重復(fù)的HTTP請求直接從本地進(jìn)行讀取。
- 類型
- 強(qiáng)制緩存:同一個(gè)HTTP資源請求,只要
瀏覽器判斷
上次請求的本地緩存沒有過期,則直接使用 - 協(xié)商緩存:若強(qiáng)緩存過期,向服務(wù)器發(fā)送請求資源的問詢,由
服務(wù)器判斷
并響應(yīng),告訴瀏覽器該緩存是否可用
- 強(qiáng)制緩存:同一個(gè)HTTP資源請求,只要
- HTTP緩存詳述
- 第一次請求服務(wù)器資源(請求資源,進(jìn)行緩存)
- 瀏覽器請求資源,服務(wù)器返回資源和響應(yīng)頭。
- 響應(yīng)頭中包含
Expires字段
或Cache-Control 字段
,表示資源在客戶端的有效緩存時(shí)間。(Cache-Control 的優(yōu)先級高于 Expires)
- 第二次請求相同的資源(命中緩存,強(qiáng)制緩存)
- 先
通過請求資源的時(shí)間與 Cache-Control 中設(shè)置的過期時(shí)間大小
,來計(jì)算出該資源是否過期,如果沒有,則使用該緩存,否則重新請求服務(wù)器; - 服務(wù)器的
響應(yīng)報(bào)文
會(huì)再次更新
瀏覽器本地緩存資源的Cache-Control
- 瀏覽器會(huì)返回成功碼
200(from disk cache)
- 先
- 第二次請求相同的資源(緩存過期,協(xié)商緩存)
- 如果命中的 Cache-Control 過期,則通過
最后修改的時(shí)間戳Last-Modified
或者資源唯一標(biāo)識(shí)Etag
,向服務(wù)器發(fā)起該資源的請求(Etag的優(yōu)先級更高,如果 Etag 有變化就不用在判斷 Last-Modified ) - 協(xié)商緩存這兩個(gè)字段都需要配合強(qiáng)制緩存中 Cache-Control 字段來使用,只有在未能命中強(qiáng)制緩存的時(shí)候,才能發(fā)起帶有協(xié)商緩存字段的請求。
- 服務(wù)器收到請求后進(jìn)行比對,如果資源沒有變化返回 304,如果資源變化了返回 200。
- 如果命中的 Cache-Control 過期,則通過
- 第一次請求服務(wù)器資源(請求資源,進(jìn)行緩存)
- 為什么 ETag 的優(yōu)先級比Last-Modified 更高?
- 在不修改文件內(nèi)容而修改一些控制信息也會(huì)導(dǎo)致,客戶端也會(huì)更新文件修改時(shí)間,從而重新請求
- 使用 Etag就能夠保證這種需求下客戶端在 1 秒內(nèi)能刷新多次
- 有些服務(wù)器不能精確獲取文件的最后修改時(shí)間
- 當(dāng)使用 ETag 字段實(shí)現(xiàn)的協(xié)商緩存的過程
- 當(dāng)瀏覽器
第一次請求
訪問服務(wù)器資源時(shí),服務(wù)器會(huì)在返回資源
的同時(shí),在Response 頭部加上 ETag 唯一標(biāo)識(shí)
,這個(gè)唯一標(biāo)識(shí)的值是根據(jù)當(dāng)前請求的資源生成的; - 當(dāng)瀏覽器
再次請求
訪問服務(wù)器中的該資源時(shí),首先會(huì)先檢查強(qiáng)制緩存
是否過期:- 如果
沒過期
,則直接使用本地緩存
; - 如果
過期
,重新請求該資源
。會(huì)在 Request 頭部加上 If-None-Match 字段,該字段的值就是 ETag 唯一標(biāo)識(shí);
- 如果
-
服務(wù)器再次收到請求
后,會(huì)根據(jù)請求中的 If-None-Match 值與當(dāng)前請求的資源生成的唯一標(biāo)識(shí)進(jìn)行比較
:- 如果值
相等
,則返回304 Not Modified
,不會(huì)返回資源; - 如果
不相等
,則返回200 狀態(tài)碼和返回資源
,并在 Response 頭部加上新的 ETag 唯一標(biāo)識(shí);
- 如果值
- 如果瀏覽器收到 304 的請求響應(yīng)狀態(tài)碼,則會(huì)從本地緩存中加載資源,否則更新資源。
- 當(dāng)瀏覽器
HTTPS
- HTTPS和HTTP的區(qū)別
- 傳輸安全
-
HTTP協(xié)議
是不安全的明文傳輸
。 -
HTTPS協(xié)議
通過SSL/TLS層進(jìn)行加密傳輸
-
- 申請問題:
- HTTPS 協(xié)議需要向 CA(證書權(quán)威機(jī)構(gòu))申請數(shù)字安全證書,通常需要一定費(fèi)用。
- 端口不同:
http
端口為80
,https
端口為443
- 傳輸安全
文章來源:http://www.zghlxwxcb.cn/news/detail-618452.html
??點(diǎn)此跳轉(zhuǎn)到首行??文章來源地址http://www.zghlxwxcb.cn/news/detail-618452.html
參考博客
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
到了這里,關(guān)于【計(jì)算機(jī)網(wǎng)絡(luò)】HTTP詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!