一、HTTP協(xié)議
超文本傳輸協(xié)議
請求/響應(yīng)報(bào)文
連接簡歷流程
HTTP的特點(diǎn)
1.1 請求/響應(yīng)報(bào)文
HTTP的請求方式都有哪些翅睛?
GET、POST、HEAD址儒、DELETE、PUT衅疙、OPTIONS等
GET和POST方式的區(qū)別莲趣?
從使用場景的角度回答
從語義的角度來回答
GET:獲取資源,安全的饱溢,冪等的喧伞,可緩存的
POST:處理資源,非安全的绩郎,非冪等的潘鲫,不可緩存的
?
安全性:不引起Server端的任何狀態(tài)變化。get肋杖、head溉仑、options
冪等性:同一個(gè)請求方法執(zhí)行多次和執(zhí)行一次的效果完全相同。put状植、delete
可緩存性:請求是否可以被緩存浊竟。get、head
你都了解哪些狀態(tài)碼津畸,他們的含義是什么振定?
1xx、2xx肉拓、3xx吩案、4xx、5xx
200: 響應(yīng)成功
301帝簇、302:發(fā)生網(wǎng)絡(luò)重定向
404:發(fā)送請求有問題
502:Server端有問題
1.2 連接建立流程
連接建立流程
三次握手:建立連接徘郭;四次揮手:斷開連接
為什么進(jìn)行三次握手而不是兩次呢?
要保證TCP的可靠傳輸丧肴,防止超時(shí)残揉,報(bào)文丟失,報(bào)文遲到的情況芋浮,下面會(huì)做詳細(xì)解釋
為什么斷開連接需要雙向斷開呢抱环?
因?yàn)門CP的客戶端和服務(wù)端都是以全雙工的形式工作的壳快,首先客戶端向服務(wù)端發(fā)送關(guān)閉寫操作,服務(wù)端回應(yīng)客戶端關(guān)閉讀操作镇草,再服務(wù)端向客戶端關(guān)閉寫操作眶痰,客服端回應(yīng)關(guān)閉寫操作。由客戶端發(fā)起是因?yàn)檎l發(fā)起誰等待的原則梯啤,這樣可以避免服務(wù)端的資源浪費(fèi)竖伯。
1.3 HTTP的特點(diǎn)
HTTP 是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,HTTP 協(xié)議一共有五大特點(diǎn):
1因宇、支持客戶/服務(wù)器模式七婴;
2、簡單快速察滑;
3打厘、靈活;
4贺辰、無連接户盯;如何建立持久連接(Connection: Keep-Alive)
5、無狀態(tài): Cookie/Session
1.3.1 無連接
無連接的含義是限制每次連接只處理一個(gè)請求饲化。服務(wù)器處理完客戶的請求莽鸭,并收到客戶的應(yīng)答后,即斷開連接滓侍。采用這種方式可以節(jié)省傳輸時(shí)間蒋川,解決資源占用問題。
當(dāng)HTTP請求較多時(shí)撩笆,重復(fù)的建立和斷開連接導(dǎo)致效率很低捺球。Keep-Alive
功能使客戶端到服務(wù)器端的連接持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請求時(shí)夕冲,Keep-Alive
功能避免了建立或者重新建立連接氮兵。
HTTP持久連接 ( HTTP persistent connection ,也稱作 HTTP keep-alive 或HTTP connection reuse)是使用同一個(gè)TCP連接來發(fā)送和接收多個(gè)HTTP請求/應(yīng)答歹鱼,而不是為每一個(gè)新的請求/應(yīng)答打開新的連接的方法泣栈。 —— 《維基百科》
優(yōu)點(diǎn):提升網(wǎng)絡(luò)訪問的效率。較少的CPU和內(nèi)存的使用弥姻,降低擁塞控制南片,減少后續(xù)請求的延遲。
1庭敦、HTTP如何建立持久連接呢疼进? 2、建立持久連接涉及哪些頭部字段秧廉?
Connection: Keep-Alive
time: 20 // 該條連接持續(xù)時(shí)間
max: 10 // 最多可以發(fā)生多少個(gè)請求/響應(yīng)對(duì)
怎么判斷一個(gè)請求是否結(jié)束伞广?
兩種判斷方式:
Content-length: 1024 根據(jù)傳輸數(shù)據(jù)的大小
chunked: 最后一個(gè)空的chunked
1.3.2 無狀態(tài)
HTTP是一種無狀態(tài)協(xié)議拣帽,意味著每個(gè)請求都是獨(dú)立的,Keep-Alive沒有改變這個(gè)特點(diǎn)嚼锄。缺少狀態(tài)意味著后續(xù)處理需要前面的信息减拭,就必須重新傳輸,這導(dǎo)致每次傳輸數(shù)據(jù)量增大区丑。
為了解決這個(gè)問題拧粪,出現(xiàn)了兩種解決方案:
Cookie可以保持登錄信息到用戶下次與服務(wù)器的會(huì)話,換句話說刊苍,下次訪問同一網(wǎng)站時(shí)既们,用戶會(huì)發(fā)現(xiàn)不必輸入用戶名和密碼就已經(jīng)登錄了濒析。與 Cookie相對(duì)的一個(gè)解決方案是Session正什,它是通過服務(wù)器來保持狀態(tài)的。當(dāng)有客戶端訪問服務(wù)器時(shí)号杏,服務(wù)器根據(jù)需求設(shè)置Session婴氮,將會(huì)話信息保存在服務(wù)器上,并返回一個(gè)SessionID給客戶端盾致,客戶端保存到內(nèi)存中主经,稱之為無過期時(shí)間的Cookie⊥ハВ客戶端關(guān)閉后Cookie被清除罩驻,他并沒有存在于用戶的Cookie臨時(shí)文件中。
1.4 中間人攻擊
Charles抓包原理是怎樣的护赊?
中間人攻擊
中間人攻擊 (英語:Man-in-the-middleattack惠遏,縮寫:MITM)在密碼學(xué)和計(jì)算機(jī)安全領(lǐng)域中,是指攻擊者與通訊的兩端分別創(chuàng)建獨(dú)立的聯(lián)系骏啰,并交換其所收到的數(shù)據(jù)节吮,使通訊的兩端認(rèn)為他們正在通過一個(gè)私密的連接與對(duì)方直接對(duì)話,但事實(shí)上整個(gè)會(huì)話都被攻擊者完全控制判耕⊥讣ǎ——《維基百科》
https
htttps建立連接的過程
https通訊過程中都使用了那些加密手段?
TCP和UDP
UDP,用戶數(shù)據(jù)報(bào)協(xié)議
特點(diǎn):無連接葫松,盡最大努力交付紫皇,面向報(bào)文
功能:復(fù)用,分用狸臣,差錯(cuò)檢測
差錯(cuò)檢測的思路可以用于開發(fā)過程中的IM信息的傳遞的正確性
TCP,傳輸控制協(xié)議
TCP的特點(diǎn)
面向連接:數(shù)據(jù)傳輸開始之前方仿,需要建立連接固棚,三次握手统翩。數(shù)據(jù)傳輸結(jié)束之后,需要釋放連接此洲,四次揮手厂汗。
可靠傳輸:無差錯(cuò),不丟失呜师,不重復(fù)娶桦,按序到達(dá)
面向字節(jié)流:
流量控制:*滑動(dòng)窗口協(xié)議
*擁塞控制:慢開始、擁塞避免汁汗,快恢復(fù)衷畦、快重傳
無差錯(cuò)
超時(shí)重傳
確認(rèn)丟失
確認(rèn)遲到
面向字節(jié)流
滑動(dòng)窗口協(xié)議
可以通過控制接收窗口的大小控制發(fā)送窗口的大小,保證數(shù)據(jù)按序到達(dá)知牌。
慢開始祈争、擁塞避免
快恢復(fù)、快重傳是基于慢開始角寸、擁塞避免的菩混,是將報(bào)文的發(fā)送個(gè)數(shù)直接從新的閾值開始擁塞避免的
DNS解析
什么是DNS解析?
域名到IP地址的映射扁藕,DNS解析請求采用UDP數(shù)據(jù)報(bào)且明文的沮峡。解析過程,客戶端向DNS服務(wù)發(fā)送域名請求亿柑,DNS服務(wù)根據(jù)域名返回對(duì)應(yīng)的IP地址邢疙,客戶端根據(jù)IP地址請求Server端服務(wù)器。
DNS查詢方式?
遞歸查詢望薄、迭代查詢
DNS解析常見問題疟游?
DNS劫持問題:因?yàn)镈NS解析使用UDP數(shù)據(jù)報(bào)且是明文的∈浇茫客戶端發(fā)送域名請求時(shí)乡摹,容易被釣魚DNS劫持返回錯(cuò)誤的IP地址。
DNS轉(zhuǎn)發(fā)
DNS劫持與HTTP有什么關(guān)系采转?
沒有關(guān)系聪廉,DNS劫持是在HTTP建立連接之前。 DNS解析通過UDP數(shù)據(jù)報(bào)故慈,訪問53端口板熊。
DNS 劫持解決方案
HTTPDNS、長連接察绷。
Session / Cookie
Session和Cookie是對(duì)HTTP協(xié)議無狀態(tài)特點(diǎn)的補(bǔ)償干签。在之前提到過Session和Cookie的作用。
Cookie
Cookie主要用來記錄用戶狀態(tài)拆撼,區(qū)分用戶容劳; 狀態(tài)保存在客戶端喘沿。客戶端向服務(wù)器發(fā)送請求竭贩,服務(wù)生成Cookie同響應(yīng)數(shù)據(jù)一同返回給客戶端蚜印,客戶端保存Cookie。
客戶端發(fā)送的Cookie是在HTTP請求報(bào)文的Cookie首部字段中留量。 服務(wù)端設(shè)置HTTP響應(yīng)報(bào)文的Set-Cookie首部字段窄赋。
修改Cookie?
新Cookie覆蓋舊Cookie楼熄。 覆蓋時(shí)新Cookie字段要與原Cookie一致忆绰。 設(shè)置Cookie的expires=過去的時(shí)間點(diǎn),或者maxAge=0可岂,可以刪除Cookie错敢。
Cookie安全
Session
Session主要用來記錄用戶狀態(tài),區(qū)分用戶青柄; 狀態(tài)保存在服務(wù)器端伐债。它是通過服務(wù)器來保持狀態(tài)的预侯。當(dāng)有客戶端訪問服務(wù)器時(shí)致开,服務(wù)器根據(jù)需求設(shè)置Session,將會(huì)話信息保存在服務(wù)器上萎馅,并返回一個(gè)SessionID給客戶端双戳,客戶端保存到內(nèi)存中,稱之為無過期時(shí)間的Cookie糜芳§酰客戶端關(guān)閉后Cookie被清除,他并沒有存在于用戶的Cookie臨時(shí)文件中峭竣。
小結(jié)
HTTP中GET和POST方式有什么區(qū)別塘辅?
HTTPS連接建立流程是怎樣的?
TCP和UDP有什么區(qū)別皆撩?
請簡述TCP的慢啟動(dòng)過程扣墩?
客戶端怎樣避免DNS劫持?