2道面試題:輸入URL按回車&HTTP2

花生PeA發表於2017-05-03

通過幾輪面試,我發現真正那種問答的技術面,寫一堆專案真不如去刷技術文章作用大,因此刷了一段時間的部落格和掘金,整理下曾經被問到的2道面試題

  • 從瀏覽器輸入URL按回車到頁面顯示都發生了什麼
  • 說說你瞭解的HTTP/2

筆者才疏學淺,如有錯誤歡迎各位dalao指正。

從瀏覽器輸入URL按回車到頁面顯示都發生了什麼

  1. 瀏覽器根據URL進行DNS查詢
    • 首先從DNS快取中查詢
    • 若未在快取中找到,則不停的向上一級級請求DNS伺服器
  2. 取得IP地址,建立TCP連線
  3. 構造HTTP請求報
    • 新增一些HTTP首部
    • 根據同源政策新增cookie
  4. 在TCP連線上傳送HTTP報文,等待響應
  5. 伺服器處理HTTP請求報文,返回響應HTTP響應報文
  6. 瀏覽器處理伺服器返回的HTTP響應報文,若為HTML則渲染頁面,不包括指令碼的簡單渲染流程如下
    1. 解析DOM、CSSOM
    2. 根據DOM、CSSOM計算render tree
    3. 根據render tree進行layout
    4. paint,至此,使用者可以看到頁面了

說說你瞭解的HTTP/2

講真,看了那麼多關於HTTP/2的文章,雖然沒用過但是也能感覺出HTTP/2與HTTP/1.1的差距不是一點半點

這裡整理的是“具體來說,對比HTTP/1.1,HTTP/2有哪些不同”

  • 在瀏覽器端,HTTP/2僅能在TLS下執行,也就是HTTPS。這不是因為HTTP/2標準強制要求,而是全球兩大瀏覽器領導者 —— Firefox和Chrome都明確地表示,他們只會實現基於TLS的HTTP/2
  • HTTP/2取消了大量頭欄位,並且取消了小版本號。也就是說伺服器和客戶端都必須確定自己是否完整相容http2或者徹底不相容
  • 最重要的一點,HTTP/2不再是一個基於文字的協議,通過新增的二進位制分幀層變成了一個二進位制協議,這意味著:
    • HTTP/2使用二進位制幀進行資料交換。HTTP/2規範中一共定義了10種幀,其中最基礎的兩種分別對應於HTTP/1.1的DATA和HEADERS幀
    • HTTP/2可以對壓縮頭資訊進行壓縮了。反正是二進位制幀
  • 利用幀,HTTP/2可以在單個TCP連線上高效傳輸所有資源
    • 通過在單個連線上建立多個流,實現流的多路複用
    • 流可以指派一個優先順序,也可以為流建立依賴關係。這樣可以避免“瀏覽器明明在等關鍵的CSS和JS,伺服器卻還在發圖片”
    • 完全避免線頭阻塞
  • 伺服器可以利用RST_STREAM幀隨時中斷某個chunk的傳送
  • 伺服器可以主動向客戶端推送資源讓客戶端快取。當然,客戶端可以使用RST_STREAM幀拒絕掉伺服器的“好意”
  • HTTP/2的流可以進行流量控制,通過公示流量視窗來限制另一端傳送資料

如果讓你用Js寫個爬蟲,你怎麼寫?

分an享li下自己用純客戶端javascript寫的pixiv.net爬蟲,在學習ES6或對js爬蟲感興趣的小夥伴歡迎Star一波喲~~

參考文獻

相關文章