2019中高級前端秘籍之服務(wù)端與網(wǎng)絡(luò)篇


2019中高級前端秘籍之CSS篇
2019中高級前端秘籍之JavaScript篇
2019中高級前端秘籍之瀏覽器篇
2019中高級前端秘籍之服務(wù)端與網(wǎng)絡(luò)篇
2019中高級前端秘籍之算法篇


1. http/https 協(xié)議

  • 1.0 協(xié)議缺陷:

    • 無法復(fù)用鏈接先朦,完成即斷開,重新慢啟動和 TCP 3次握手
    • head of line blocking: 線頭阻塞喳魏,導(dǎo)致請求之間互相影響
  • 1.1 改進(jìn):

    • 長連接(默認(rèn) keep-alive),復(fù)用
    • host 字段指定對應(yīng)的虛擬站點
    • 新增功能:
      • 斷點續(xù)傳
      • 身份認(rèn)證
      • 狀態(tài)管理
      • cache 緩存
        • Cache-Control
        • Expires
        • Last-Modified
        • Etag
  • 2.0:

    • 多路復(fù)用
    • 二進(jìn)制分幀層: 應(yīng)用層和傳輸層之間
    • 首部壓縮
    • 服務(wù)端推送
  • https: 較為安全的網(wǎng)絡(luò)傳輸協(xié)議

    • 證書(公鑰)
    • SSL 加密
    • 端口 443
  • TCP:

    • 三次握手
    • 四次揮手
    • 滑動窗口: 流量控制
    • 擁塞處理
      • 慢開始
      • 擁塞避免
      • 快速重傳
      • 快速恢復(fù)
  • 緩存策略: 可分為 強(qiáng)緩存協(xié)商緩存

    • Cache-Control/Expires: 瀏覽器判斷緩存是否過期迷郑,未過期時创倔,直接使用強(qiáng)緩存,Cache-Control的 max-age 優(yōu)先級高于 Expires

    • 當(dāng)緩存已經(jīng)過期時霸妹,使用協(xié)商緩存

      • 唯一標(biāo)識方案: Etag(response 攜帶) & If-None-Match(request攜帶知押,上一次返回的 Etag): 服務(wù)器判斷資源是否被修改鹃骂,
      • 最后一次修改時間: Last-Modified(response) & If-Modified-Since (request罢绽,上一次返回的Last-Modified)
        • 如果一致,則直接返回 304 通知瀏覽器使用緩存
        • 如不一致良价,則服務(wù)端返回新的資源
    • Last-Modified 缺點:

      • 周期性修改,但內(nèi)容未變時杯矩,會導(dǎo)致緩存失效
      • 最小粒度只到 s袖外, s 以內(nèi)的改動無法檢測到
    • Etag 的優(yōu)先級高于 Last-Modified

2. 常見狀態(tài)碼

  • 1xx: 接受魂务,繼續(xù)處理
  • 200: 成功,并返回數(shù)據(jù)
  • 201: 已創(chuàng)建
  • 202: 已接受
  • 203: 成為粘姜,但未授權(quán)
  • 204: 成功,無內(nèi)容
  • 205: 成功豺裆,重置內(nèi)容
  • 206: 成功号显,部分內(nèi)容
  • 301: 永久移動臭猜,重定向
  • 302: 臨時移動押蚤,可使用原有URI
  • 304: 資源未修改揽碘,可使用緩存
  • 305: 需代理訪問
  • 400: 請求語法錯誤
  • 401: 要求身份認(rèn)證
  • 403: 拒絕請求
  • 404: 資源不存在
  • 500: 服務(wù)器錯誤

3. get / post

  • get: 緩存、請求長度受限劫灶、會被歷史保存記錄
    • 無副作用(不修改資源)掖桦,冪等(請求次數(shù)與資源無關(guān))的場景
  • post: 安全滞详、大數(shù)據(jù)紊馏、更多編碼類型

兩者詳細(xì)對比如下圖:

<img width="600" src="./images/interview/3.png">

4. Websocket

Websocket 是一個 持久化的協(xié)議赫编, 基于 http , 服務(wù)端可以 主動 push

  • 兼容:

    • FLASH Socket
    • 長輪詢: 定時發(fā)送 ajax
    • long poll: 發(fā)送 --> 有消息時再 response
  • new WebSocket(url)

  • ws.onerror = fn

  • ws.onclose = fn

  • ws.onopen = fn

  • ws.onmessage = fn

  • ws.send()

5. TCP三次握手

建立連接前嘹吨,客戶端和服務(wù)端需要通過握手來確認(rèn)對方:

  • 客戶端發(fā)送 syn(同步序列編號) 請求境氢,進(jìn)入 syn_send 狀態(tài)萍聊,等待確認(rèn)
  • 服務(wù)端接收并確認(rèn) syn 包后發(fā)送 syn+ack 包,進(jìn)入 syn_recv 狀態(tài)
  • 客戶端接收 syn+ack 包后寿桨,發(fā)送 ack 包,雙方進(jìn)入 established 狀態(tài)

6. TCP四次揮手

  • 客戶端 -- FIN --> 服務(wù)端挡鞍, FIN—WAIT
  • 服務(wù)端 -- ACK --> 客戶端媒佣, CLOSE-WAIT
  • 服務(wù)端 -- ACK,FIN --> 客戶端, LAST-ACK
  • 客戶端 -- ACK --> 服務(wù)端默伍,CLOSED

7. Node 的 Event Loop: 6個階段

  • timer 階段: 執(zhí)行到期的setTimeout / setInterval隊列回調(diào)
  • I/O 階段: 執(zhí)行上輪循環(huán)殘流的callback
  • idle, prepare
  • poll: 等待回調(diào)
      1. 執(zhí)行回調(diào)
      1. 執(zhí)行定時器
      • 如有到期的setTimeout / setInterval, 則返回 timer 階段
      • 如有setImmediate炼蹦,則前往 check 階段
  • check
    • 執(zhí)行setImmediate
  • close callbacks

跨域

  • JSONP: 利用<script>標(biāo)簽不受跨域限制的特點狸剃,缺點是只能支持 get 請求
function jsonp(url, jsonpCallback, success) {
  const script = document.createElement('script')
  script.src = url
  script.async = true
  script.type = 'text/javascript'
  window[jsonpCallback] = function(data) {
    success && success(data)
  }
  document.body.appendChild(script)
}
  • 設(shè)置 CORS: Access-Control-Allow-Origin:*
  • postMessage

安全

  • XSS攻擊: 注入惡意代碼
    • cookie 設(shè)置 httpOnly
    • 轉(zhuǎn)義頁面上的輸入內(nèi)容和輸出內(nèi)容
  • CSRF: 跨站請求偽造,防護(hù):
    • get 不修改數(shù)據(jù)
    • 不被第三方網(wǎng)站訪問到用戶的 cookie
    • 設(shè)置白名單虑省,不被第三方網(wǎng)站請求
    • 請求校驗

作者:郭東東
鏈接:https://juejin.im/post/5c64d15d6fb9a049d37f9c20
來源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)探颈,非商業(yè)轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末光羞,一起剝皮案震驚了整個濱河市怀大,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌化借,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勘纯,死亡現(xiàn)場離奇詭異钓瞭,居然都是意外死亡淫奔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門鸭丛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唐责,“玉大人,你說我怎么就攤上這事鼠哥。” “怎么了抄罕?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵于颖,是天一觀的道長。 經(jīng)常有香客問我森渐,道長冒晰,這世上最難降的妖魔是什么竟块? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任彩郊,我火速辦了婚禮,結(jié)果婚禮上秫逝,老公的妹妹穿的比我還像新娘。我一直安慰自己违帆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布的畴。 她就那樣靜靜地躺著尝胆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪含衔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天缓呛,我揣著相機(jī)與錄音杭隙,去河邊找鬼。 笑死票髓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炬称。 我是一名探鬼主播涡拘,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跷车!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起朽缴,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茅郎,沒想到半個月后或渤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡掌敬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年池磁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片地熄。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡离斩,死狀恐怖银舱,靈堂內(nèi)的尸體忽然破棺而出跛梗,到底是詐尸還是另有隱情棋弥,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布漾岳,位于F島的核電站粉寞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏唧垦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一巧还、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧麸祷,春花似錦、人聲如沸阶牍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽融求。三九已至,卻和暖如春生宛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陷舅。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工莱睁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仰剿。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像琳彩,于是被迫代替她去往敵國和親部凑。 傳聞我的和親對象是個殘疾皇子露乏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345