<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          前端成長進(jìn)階指北(網(wǎng)絡(luò)篇)

          共 6832字,需瀏覽 14分鐘

           ·

          2021-08-23 08:55


          點擊上方 三分鐘學(xué)前端,關(guān)注公眾號

          回復(fù)交流,加入前端編程面試算法每日一題群


          面試官也在看的前端面試資料

          嗨!各位早上好,三分鐘學(xué)前端來一波第一季度回顧與總結(jié),今天主講 網(wǎng)絡(luò) 篇 ,且已整理成了 pdf ,文末免費(fèi)獲取

          下面進(jìn)入正文吧??

          分別介紹下 http 和 tcp 協(xié)議,它們之間的區(qū)別與聯(lián)系

          TCP 協(xié)議對應(yīng)于傳輸層,而 HTTP 協(xié)議對應(yīng)于應(yīng)用層,從本質(zhì)上來說,二者沒有可比性:

          • HTTP 對應(yīng)于應(yīng)用層,TCP 協(xié)議對應(yīng)于傳輸層
          • HTTP 協(xié)議是在 TCP 協(xié)議之上建立的,HTTP 在發(fā)起請求時通過 TCP 協(xié)議建立起連接服務(wù)器的通道,請求結(jié)束后,立即斷開 TCP 連接
          • HTTP 是無狀態(tài)的短連接,而 TCP 是有狀態(tài)的長連接
          • TCP是傳輸層協(xié)議,定義的是數(shù)據(jù)傳輸和連接方式的規(guī)范,HTTP是應(yīng)用層協(xié)議,定義的是傳輸數(shù)據(jù)的內(nèi)容的規(guī)范

          一文走進(jìn) HTTP 與 TCP 協(xié)議,它們的區(qū)別與聯(lián)系

          HTTP/2對比HTTP/1.1,特性是什么?是如何解決隊頭阻塞與壓縮頭部的?

          自從 1997 年 HTTP/1.1 發(fā)布以來,我們已經(jīng)使用 HTTP/1.x 相當(dāng)長一段時間了,但近幾年內(nèi)容的爆炸式成長使得 HTTP/1.1 越來越無法滿足現(xiàn)代網(wǎng)絡(luò)的需求了,HTTP/1.1 協(xié)議的性能缺陷:

          • 高延遲:頁面訪問速度下降
          • 明文傳輸:不安全
          • 無狀態(tài):頭部巨大切重復(fù)
          • 不支持服務(wù)器推送

          HTTP/1.x 為了性能考慮,會引入雪碧圖、將小圖內(nèi)聯(lián)、使用多個域名等等的方式,但還是有一些關(guān)鍵點無法優(yōu)化,例如HTTP頭部巨大且重復(fù)、明文傳輸不安全、服務(wù)器不能主動推送等,要改變這些必須重新設(shè)計 HTTP 協(xié)議,于是 HTTP/2 就出來了!

          2015 年,HTTP/2 發(fā)布。HTTP/2 是現(xiàn)行 HTTP 協(xié)議(HTTP/1.x)的替代,但它不是重寫,HTTP 方法 / 狀態(tài)碼 / 語義都與 HTTP/1.x 一樣。HTTP/2 基于 SPDY,專注于性能,最大的目標(biāo)是在用戶和網(wǎng)站間只用一個連接(connec-tion)

          • 二進(jìn)制傳輸
          • Header 壓縮(HPACK)
          • 多路復(fù)用
          • 服務(wù)端 Push
          • 提高安全性

          HTTP/2 遺留問題:

          • HTTP/2 也存在隊頭阻塞問題,比如丟包。
          • 慢啟動

          HTTP/2對比HTTP/1.1,新特性是什么?是如何解決隊頭阻塞與壓縮頭部的?

          說一下HTTP/3新特性,為什么選擇使用UDP協(xié)議?

          HTTP/2 使用二進(jìn)制傳輸、Header 壓縮(HPACK)、多路復(fù)用等,相較于 HTTP/1.1 大幅提高了數(shù)據(jù)傳輸效率,但它仍然存在著以下幾個致命問題(主要由底層支撐的 TCP 協(xié)議造成):

          • 建立連接時間長
          • 隊頭阻塞問題相較于 HTTP/1.1 更嚴(yán)重

          而修改 TCP 協(xié)議已經(jīng)是一件不可能完成的任務(wù),所以Google 就更起爐灶搞了一個基于 UDP 協(xié)議的 QUIC 協(xié)議:

          • 基于 TCP 開發(fā)的設(shè)備和協(xié)議非常多,兼容困難
          • TCP 協(xié)議棧是 Linux 內(nèi)部的重要部分,修改和升級成本很大
          • UDP 本身是無連接的、沒有建鏈和拆鏈成本
          • UDP 的數(shù)據(jù)包無隊頭阻塞問題
          • UDP 改造成本小

          QUIC 雖然基于 UDP,但是在原本的基礎(chǔ)上新增了很多功能,比如多路復(fù)用、0-RTT、使用 TLS1.3 加密、流量控制、有序交付、重傳等等功能

          說一下 HTTP/3 新特性,為什么選擇使用 UDP 協(xié)議?

          有關(guān) HTTP 緩存的首部字段說一下

          常見的HTTP 緩存首部字段有:

          • Expires:響應(yīng)頭,代表該資源的過期時間
          • Cache-Control:請求/響應(yīng)頭,緩存控制字段,精確控制緩存策略
          • If-Modified-Since:請求頭,資源最近修改時間,由瀏覽器告訴服務(wù)器
          • Last-Modified:響應(yīng)頭,資源最近修改時間,由服務(wù)器告訴瀏覽器
          • Etag:響應(yīng)頭,資源標(biāo)識,由服務(wù)器告訴瀏覽器
          • If-None-Match:請求頭,緩存資源標(biāo)識,由瀏覽器告訴服務(wù)器

          其中, 強(qiáng)緩存 :

          • Expires(HTTP/1.0)
          • Cache-Control(HTTP/1.1)

          協(xié)商緩存:

          • Last-Modified 和 If-Modified-Since(HTTP/1.0)
          • ETag 和 If-None-Match(HTTP/1.1)

          了解 HTTP 緩存嗎?有關(guān) HTTP 緩存的首部字段說一下 ?

          HTTP 常見的響應(yīng)碼,拒絕服務(wù)資源是哪個?

          RFC 把狀態(tài)碼分成五類,分別是:

          • 1××: 請求已被接受正被處理,表示目前是協(xié)議處理的中間狀態(tài),還需要后續(xù)的操作
          • 2××: 請求成功處理,報文已經(jīng)收到并被正確處理
          • 3××: 代表需要客戶端采取進(jìn)一步的操作才能完成請求,例如重定向,通常,這些狀態(tài)碼用來重定向,后續(xù)的請求地址(重定向目標(biāo))在本次響應(yīng)的Location域中指明
          • 4××: 客戶端錯誤,請求報文有誤,服務(wù)器無法處理
          • 5××: 服務(wù)器錯誤,服務(wù)器在處理請求時內(nèi)部發(fā)生了錯誤

          容易爭論的點:

          • 301、302 和 307區(qū)別(對 SEO 的影響)
          • 401 和 404 的區(qū)別

          HTTP 狀態(tài)碼有哪些?該怎么用?

          HTTP 中的 keep-alive 有了解嗎?它和多路復(fù)用的區(qū)別

          HTTP/1.x keep-alive 與 HTTP/2 多路復(fù)用區(qū)別:

          • HTTP/1.x 是基于文本的,只能整體去傳;HTTP/2 是基于二進(jìn)制流的,可以分解為獨(dú)立的幀,交錯發(fā)送
          • HTTP/1.x keep-alive 必須按照請求發(fā)送的順序返回響應(yīng);HTTP/2 多路復(fù)用不按序響應(yīng)
          • HTTP/1.x keep-alive 為了解決隊頭阻塞,將同一個頁面的資源分散到不同域名下,開啟了多個 TCP 連接;HTTP/2 同域名下所有通信都在單個連接上完成
          • HTTP/1.x keep-alive 單個 TCP 連接在同一時刻只能處理一個請求(兩個請求的生命周期不能重疊);HTTP/2 單個 TCP 同一時刻可以發(fā)送多個請求和響應(yīng)

          了解 HTTP/1.x 的 keep-alive 嗎?它與 HTTP/2 多路復(fù)用的區(qū)別是什么?

          http header怎么判斷協(xié)議是不是 websocket

          WebSocket 使用 ws 或 wss 的統(tǒng)一資源標(biāo)志符,通過判斷 header 中是否包含 Connection: Upgrade 與 Upgrade: websocket 來判斷當(dāng)前是否需要升級到 websocket 協(xié)議,除此之外,它還包含 Sec-WebSocket-Key 、 Sec-WebSocket-Version 等header,當(dāng)服務(wù)器同意 WebSocket 連接時,返回響應(yīng)碼 101 ,它的 API 很簡單。

          方法:

          • socket.send(data)
          • socket.close([code], [reason])

          事件:

          • open
          • message
          • error
          • close

          http header 怎么判斷協(xié)議是不是 websocket

          GET 與 POST 區(qū)別是什么?

          w3school 給出的標(biāo)準(zhǔn)答案:


          GETPOST
          后退按鈕/刷新無害數(shù)據(jù)會被重新提交(瀏覽器應(yīng)該告知用戶數(shù)據(jù)會被重新提交)。
          書簽可收藏為書簽不可收藏為書簽
          緩存能被緩存不能緩存
          編碼類型application/x-www-form-urlencodedapplication/x-www-form-urlencoded 或 multipart/form-data。為二進(jìn)制數(shù)據(jù)使用多重編碼。
          歷史參數(shù)保留在瀏覽器歷史中。參數(shù)不會保存在瀏覽器歷史中。
          對數(shù)據(jù)長度的限制是的。當(dāng)發(fā)送數(shù)據(jù)時,GET 方法向 URL 添加數(shù)據(jù);URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。無限制。
          對數(shù)據(jù)類型的限制只允許 ASCII 字符。沒有限制。也允許二進(jìn)制數(shù)據(jù)。
          安全性與 POST 相比,GET 的安全性較差,因為所發(fā)送的數(shù)據(jù)是 URL 的一部分。在發(fā)送密碼或其他敏感信息時絕不要使用 GET !POST 比 GET 更安全,因為參數(shù)不會被保存在瀏覽器歷史或 web 服務(wù)器日志中。
          可見性數(shù)據(jù)在 URL 中對所有人都是可見的。數(shù)據(jù)不會顯示在 URL 中。

          從 HTTP 協(xié)議上看,GET 與 POST 的本質(zhì)區(qū)別有兩點:

          • 請求行不同:
          • GET:GET /uri HTTP/1.1
          • POST:POST /uri HTTP/1.1
          • 對服務(wù)器資源的操作不同:
          • GET:表示從服務(wù)器獲取資源
          • POST:向指定的服務(wù)器資源提交數(shù)據(jù)(通常導(dǎo)致狀態(tài)或服務(wù)器上的副作用的更改)

          進(jìn)階:常見問題及解答:

          • POST 方法比 GET 方法安全?
          • POST 方法會產(chǎn)生兩個 TCP 數(shù)據(jù)包?

          你真的了解 GET 和 POST 嗎,它們的區(qū)別是什么?

          session 和 cookie 的區(qū)別

          • 安全性: Session 比 Cookie 安全,Session 是存儲在服務(wù)器端的,Cookie 是存儲在客戶端的。
          • 存取值的類型不同:Cookie 只支持存字符串?dāng)?shù)據(jù),想要設(shè)置其他類型的數(shù)據(jù),需要將其轉(zhuǎn)換成字符串,Session 可以存任意數(shù)據(jù)類型。
          • 有效期不同: Cookie 可設(shè)置為長時間保持,比如我們經(jīng)常使用的默認(rèn)登錄功能,Session 一般失效時間較短,客戶端關(guān)閉(默認(rèn)情況下)或者 Session 超時(一般30分鐘無操作)都會失效。
          • 存儲大小不同: 單個 Cookie 保存的數(shù)據(jù)不能超過 4K,Session 可存儲數(shù)據(jù)遠(yuǎn)高于 Cookie,但是當(dāng)訪問量過多,會占用過多的服務(wù)器資源。

          傻傻分不清之 Cookie、Session、Token、JWT

          如果讓你去實現(xiàn)一個 CSRF 攻擊你會怎么做?

          了解 CSRF 常見的攻擊方式,模擬攻擊就很簡單了,幾種常見的攻擊方式:

          • 自動發(fā)起 GET 請求的 CSRF
          • 自動發(fā)起 POST 請求的 CSRF
          • 引誘用戶點擊鏈接的 CSRF

          防護(hù)策略:

          • 利用 Cookie 的 SameSite 屬性
          • 利用同源策略
          • Token 認(rèn)證

          如果讓你去實現(xiàn)一個 CSRF 攻擊你會怎么做?

          除了CSRF,你還知道其它的攻擊方式嗎?

          我所了解的,除了 CSRF ,還有:

          • XSS 攻擊
          • SQL 注入攻擊
          • DDoS 攻擊
          • 上傳文件漏洞
          • DNS 查詢攻擊

          結(jié)合上篇 如果讓你去實現(xiàn)一個 CSRF 攻擊你會怎么做? ,總共介紹了六種 web 攻擊與防護(hù),其中最重要的是 CSRF 攻擊、 XSS 攻擊,其余只做了解即可。

          除了CSRF,你還知道哪些其它的攻擊方式嗎?

          為什么說 HTTPS 比 HTTP 安全呢

          HTTP 協(xié)議使用起來非常的方便,但是它存在一個致命的缺點:不安全。HTTPS并非是應(yīng)用層的一種新協(xié)議,其實是 HTTP+SSL/TLS 的簡稱

          HTTP 和 HTTPS 的區(qū)別:

          • HTTP 是超文本傳輸協(xié)議,信息是明文傳輸,HTTPS 則是具有安全性的TLS(SSL)加密傳輸協(xié)議
          • HTTP 和 HTTPS 使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443
          • HTTP 的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由 HTTP+SSL/TLS 協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比 HTTPS 協(xié)議安全。

          針對抓包問題,HTTPS 可以防止用戶在不知情的情況下通信鏈路被監(jiān)聽,對于主動授信的抓包操作是不提供防護(hù)的,因為這個場景用戶是已經(jīng)對風(fēng)險知情。

          為什么說HTTPS比HTTP安全呢

          DNS 協(xié)議是什么?完整查詢過程?為什么選擇使用 UDP 協(xié)議發(fā)起 DNS 查詢?

          DNS(Domain Name System:域名系統(tǒng)),與 HTTP、FTP 和 SMTP 一樣,DNS 協(xié)議也是應(yīng)用層的協(xié)議,用于將用戶提供的主機(jī)名(域名)解析為 IP 地址

          DNS完整查詢過程??:

          1. 首先搜索 瀏覽器的 DNS 緩存 ,緩存中維護(hù)一張域名與 IP 地址的對應(yīng)表
          2. 如果沒有命中??,則繼續(xù)搜索 操作系統(tǒng)的 DNS 緩存
          3. 如果依然沒有命中???♀?,則操作系統(tǒng)將域名發(fā)送至 本地域名服務(wù)器 ,本地域名服務(wù)器查詢自己的 DNS 緩存,查找成功則返回結(jié)果(注意:主機(jī)和本地域名服務(wù)器之間的查詢方式是 遞歸查詢 )
          4. 若本地域名服務(wù)器的 DNS 緩存沒有命中???,則本地域名服務(wù)器向上級域名服務(wù)器進(jìn)行查詢,通過以下方式進(jìn)行 迭代查詢 (注意:本地域名服務(wù)器和其他域名服務(wù)器之間的查詢方式是迭代查詢,防止根域名服務(wù)器壓力過大):
          • 首先本地域名服務(wù)器向根域名服務(wù)器發(fā)起請求,根域名服務(wù)器是最高層次的,它并不會直接指明這個域名對應(yīng)的 IP 地址,而是返回頂級域名服務(wù)器的地址,也就是說給本地域名服務(wù)器指明一條道路,讓他去這里尋找答案
          • 本地域名服務(wù)器拿到這個頂級域名服務(wù)器的地址后,就向其發(fā)起請求,獲取權(quán)限域名服務(wù)器的地址
          • 本地域名服務(wù)器根據(jù)權(quán)限域名服務(wù)器的地址向其發(fā)起請求,最終得到該域名對應(yīng)的 IP 地址
          1. 本地域名服務(wù)器 將得到的 IP 地址返回給操作系統(tǒng),同時自己將 IP 地址 緩存 起來??
          2. 操作系統(tǒng) 將 IP 地址返回給瀏覽器,同時自己也將 IP 地址 緩存 起來??
          3. 至此, 瀏覽器 就得到了域名對應(yīng)的 IP 地址,并將 IP 地址 緩存 起來??

          需要注意的是,DNS 使用了 UDP 協(xié)議來獲取域名對應(yīng)的 IP 地址,這個沒錯,但有些片面,準(zhǔn)確的來說,DNS 查詢在剛設(shè)計時主要使用 UDP 協(xié)議進(jìn)行通信,而 TCP 協(xié)議也是在 DNS 的演進(jìn)和發(fā)展中被加入到規(guī)范的:

          1. DNS 在設(shè)計之初就在區(qū)域 傳輸中引入了 TCP 協(xié)議 , 在查詢中使用 UDP 協(xié)議 ,它同時占用了 UDP 和 TCP 的 53 端口
          2. 當(dāng) DNS 超過了 512 字節(jié)的限制,我們第一次在 DNS 協(xié)議中明確了 『當(dāng) DNS 查詢被截斷時,應(yīng)該使用 TCP 協(xié)議進(jìn)行重試』 這一規(guī)范;
          3. 隨后引入的 EDNS 機(jī)制允許我們使用 UDP 最多傳輸 4096 字節(jié)的數(shù)據(jù),但是由于 MTU 的限制導(dǎo)致的數(shù)據(jù)分片以及丟失,使得這一特性不夠可靠;
          4. 在最近的幾年,我們重新規(guī)定了 DNS 應(yīng)該同時支持 UDP 和 TCP 協(xié)議,TCP 協(xié)議也不再只是重試時的選擇;

          DNS 協(xié)議是什么?完整查詢過程?為什么選擇使用 UDP 協(xié)議發(fā)起 DNS 查詢?

          TCP 的三次握手和四次揮手,了解泛洪攻擊么

          TCP 三次握手(連接過程)

          TCP 四次揮手(斷開鏈接)

          我們已經(jīng)知道,TCP 只有經(jīng)過三次握手才能連接,而 SYN 泛洪攻擊就是針對 TCP 握手過程進(jìn)行攻擊:

          • 攻擊者發(fā)送大量的 SYN 包給服務(wù)器(第一次握手成功)
          • 服務(wù)器回應(yīng)(SYN + ACK)包(第二次握手成功)
          • 但是攻擊者不回應(yīng) ACK 包(第三次握手不進(jìn)行)

          導(dǎo)致服務(wù)器存在大量的半開連接,這些半連接可以耗盡服務(wù)器資源,使被攻擊服務(wù)器無法再響應(yīng)正常 TCP 連接,從而達(dá)到攻擊的目的

          TCP 的三次握手和四次揮手,了解泛洪攻擊么

          pdf

          關(guān)注「三分鐘學(xué)前端」

          回復(fù)「網(wǎng)絡(luò)」,自動獲取三分鐘學(xué)前端網(wǎng)絡(luò)篇小書(90+頁)

          回復(fù)「JS」,自動獲取三分鐘學(xué)前端 JS 篇小書(120+頁)

          回復(fù)「算法」,自動獲取 github 2.9k+ 的前端算法小書

          回復(fù)「面試」,自動獲取 github 23.2k+ 的前端面試小書

          回復(fù)「簡歷」,自動獲取程序員系列的 120 套模版

          最近開源了一個github倉庫:百問百答,在工作中很難做到對社群問題進(jìn)行立即解答,所以可以將問題提交至 https://github.com/Advanced-Frontend/Just-Now-QA ,我會在每晚花費(fèi) 1 個小時左右進(jìn)行處理,更多的是鼓勵與歡迎更多人一起參與探討與解答??

          最后

          歡迎關(guān)注「三分鐘學(xué)前端」,回復(fù)「交流」自動加入前端三分鐘進(jìn)階群,每日一道編程算法面試題(含解答),助力你成為更優(yōu)秀的前端開發(fā)!
          》》面試官也在看的前端面試資料《《
          “在看和轉(zhuǎn)發(fā)”就是最大的支持


          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人中文在线视频 | 草逼wwwwww. | 久久精品国产99国产精品导航 | 综合久色aⅴ | 国产高清无码视频在线 |