我被Hr領進了一個小黑屋,讓我在這裏等面試官,過來一會,一位穿着拖鞋的中年男子走了進來,看着他絕頂聰明的髮際線,知道這確定是位大佬,我內心倍感到了壓力;javascript
面試官果真不是蓋的,剛坐下後就開始當即暴力輸出了java
https://silently9527.cn
會發生什麼?我:(這尼瑪就是怕被搞事情因此沒寫精通,這也被搞。會發生什麼,固然是展現出網頁啊,大腦飛速旋轉,脖子快斷的時候,終於想到面試官可能想要問什麼了)程序員
我:英俊瀟灑的面試官,你好!面試
首先瀏覽器會去訪問DNS服務器,查詢到域名對應的ip地址是多少,而後瀏覽器再去訪問這個ip地址;若是還要往底層在說的話,就會涉及到tcp/ip的分層,我仍是來畫張圖吧。瀏覽器
服務器返回資源的過程也是相似的方式安全
我:(還好前前大學女朋友沒把我當年上課的筆記給扔掉,恰好昨晚找回來溫習了一下,溫故而知新!只是筆記而已,你們別想歪了!)
插圖服務器
我:TCP/IP協議族分爲4層:應用層、傳輸層、網絡層、數據鏈路層cookie
我:在這個分層中,每次網絡請求都會按照分層的順序與對方進行通訊,發送端從應用層往下走,接收端從數據鏈路層往上走;以Http來舉例的話:網絡
在發送方每通過一層,就會被加上該層的首部信息,當接收方接受到數據後,在每個層會去掉對應的首部信息併發
我:TCP協議採用的三次握手策略
我:假如說是兩次握手,若是客戶端本身處理異常或者是服務器返回的ack消息丟失,那麼客服端會認爲鏈接創建失敗,再次從新發送請求創建鏈接,可是服務端卻無感知,覺得鏈接以及正常創建,致使服務器創建無用的鏈接,浪費資源
假如四次握手,若是三次已經足夠,那就不須要四次了。若是四次的話,最後一個ACK丟失,那麼又會出現兩次握手的問題。
我:
我:由於當服務器收到客戶端斷開鏈接的請求後,服務器不能當即斷開鏈接,由於可能服務器端還有數據未發送完成,因此只能回覆一個ACK表示我已收到消息;等服務器端數據發送完成以後再發送一個FIN但願端開鏈接的消息,客戶端回覆ACK以後,就能夠安全斷開了
我:自己HTTP協議是不保存狀態的,自身不對請求和響應直接的通訊狀態進行保存,因此是無狀態的協議。由於在有些場景下咱們須要保存用戶的登陸信息,因此引入了cookie來管理狀態。客戶端第一次請求服務器的時候,服務器會生成cookie添加在響應頭裏面,之後客戶端的每次請求都會帶上這個cookie信息。
我:
Set-Cookie
字段向客戶端設置Cookie,屬性:
我:
我:(毛線啊,我只是個來面試Java的初級程序員,幹嗎要反覆拿Http來摩擦我呢?!不過沒事,我皮的很,這道題我又會)
我:在HTTP協議的早期,每進行一次HTTP通訊就要斷開一次tcp鏈接,當時傳輸的內容少還能接受,如今每一個網頁通常的會包含大量的圖片,每次請求都會形成TCP鏈接的鏈接和斷開,增長通訊的開銷。
爲了解決這個問題因此想出了持久鏈接的方法,也叫作keep-alive,只要一端沒有提出斷開鏈接就會一直保持TCP鏈接的狀態。持久化鏈接使的客戶端能夠同時併發發送多個請求,不用一個接着一個的等待響應。
我:HTTP請求頭有個Range字段;咱們下載文件的時候若是遇到網絡中斷,若是重頭開始下載會浪費時間,因此咱們能夠從上一次中斷處繼續開始下載;具體的操做:
Range: bytes=5001-10000
或者指定5001之後的全部數據
Range: bytes=5001-
響應返回的狀態碼是206
我:(面試官我簡歷上忘記寫了,我曾經是學霸,記憶力好,背書沒輸過)
我:HTTP的狀態碼主要分爲了四類:
常見的狀態碼有: 200(請求正常處理完成)、204(請求處理成功,可是沒有資源返回)、206(表示客戶端進行了範圍請求,響應報文中包含了Content-Range)、301(永久性重定向,請求的資源以及被分配到了新的地址)、302(臨時重定向,但願用戶而且請求新地址)、400(客戶端請求報文出現錯誤,一般是參數錯誤)、401(客戶端未認證錯誤)、403(沒有權限訪問該資源)、404(未找到請求的資源)、405(不支持該請求方法,若是服務器支持GET,客戶端用POST請求就會出現這個錯誤碼)、500(服務器異常)、503(服務器不能提供服務)
我:(這我都能記住,是否是的給我點個贊)(已瘋狂暗示兄弟們點贊,不要白嫖哦)
我:報文的類型分爲了請求報文和響應報文兩種;
請求報文包含三部分:
我:Http的問題
我:首先須要說到兩種加密機制
因爲這兩個加密的特別,HTTPS採用的時候混合加密機制,在交換密鑰的階段使用的是非對稱加密,在創建通訊交換報文階段採用的是對稱加密
以訪問 https://silently9527.cn 舉例
我:雖然https是能夠加密的,可是由於請求仍是能夠被攔截,如何讓客戶端知道返回給本身的公鑰是真實服務器給的而不是***者給的;這就須要驗證證書的合法性,因此須要引入第三方認證機構。一般https的證書須要到第三方機構去申請購買,若是是咱們本身生成的https證書瀏覽器驗證不過會彈出警告。
我:瀏覽器在向證書認證中心驗證證書的過程使用的也是非對稱加密,這裏想要讓公鑰可以安全的轉交給客戶端,是很是困難的,因此瀏覽器的開發商一般會在瀏覽器內部植入經常使用認證機構的公開密鑰
能撐到如今,你本身都忍不住本身給本身點個讚了!(再次暗示點贊)
本篇面試故事純屬虛構,請你們不要當真,玩笑歸玩笑,莫拿面試開玩笑。
文中或許會存在或多或少的不足、錯誤之處,有建議或者意見也很是歡迎你們在評論交流。
最後,白嫖很差,創做不易,但願朋友們能夠點贊評論關注三連,由於這些就是我分享的所有動力來源