經過幾輪面試,我發現真正那種問答的技術面,寫一堆項目真不如去刷技術文章做用大,所以刷了一段時間的博客和掘金,整理下曾經被問到的2道面試題javascript
從瀏覽器輸入URL按回車到頁面顯示都發生了什麼java
說說你瞭解的HTTP/2git
講真,這2個問題筆者都沒有試驗過,純粹整理其餘文章成「能夠用來答面試」的格式,若有錯誤歡迎指正。github
瀏覽器根據URL進行DNS查詢面試
首先從DNS緩存中查詢瀏覽器
若未在緩存中找到,則不停的向上一級級請求DNS服務器緩存
取得IP地址,創建TCP鏈接服務器
構造HTTP請求報cookie
添加一些HTTP首部學習
根據同源政策添加cookie
在TCP鏈接上發送HTTP報文,等待響應
服務器處理HTTP請求報文,返回響應HTTP響應報文
瀏覽器處理服務器返回的HTTP響應報文,若爲HTML則渲染頁面,不包括腳本的簡單渲染流程以下
解析DOM、CSSOM
根據DOM、CSSOM計算render tree
根據render tree進行layout
paint,至此,用戶能夠看到頁面了
講真,看了那麼多關於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的流能夠進行流量控制,經過公示流量窗口來限制另外一端發送數據
分an享li下本身用純客戶端javascript寫的pixiv.net爬蟲,在學習ES6或對js爬蟲感興趣的小夥伴歡迎Star一波喲~~
Github pea3nut/Pxer