從瀏覽器地址欄輸入url到顯示頁面的步驟

從瀏覽器地址欄輸入url到顯示頁面的步驟(以HTTP為例)

- 在瀏覽器地址欄輸入URL
- 瀏覽器查看緩存,如果請求資源在緩存中并且新鮮,跳轉到轉碼步驟
? ? - 如果資源未緩存,發起新請求
? ? - 如果已緩存,檢驗是否足夠新鮮,足夠新鮮直接提供給客戶端,否則與服務器進行驗證。
? ? - 檢驗新鮮通常有兩個HTTP頭進行控制Expires和Cache-Control:
? ?? ???- HTTP1.0提供Expires,值為一個絕對時間表示緩存新鮮日期
? ?? ???- HTTP1.1增加了Cache-Control: max-age=,值為以秒為單位的最大新鮮時間
- 瀏覽器解析URL獲取協議,主機,端口,path
- 瀏覽器組裝一個HTTP(GET)請求報文
- 瀏覽器獲取主機ip地址,過程如下:
? ? - 瀏覽器緩存
? ? - 本機緩存
? ? - hosts文件
? ? - 路由器緩存
? ? - ISP DNS緩存
? ? - DNS遞歸查詢(可能存在負載均衡導致每次IP不一樣)
- 打開一個socket與目標IP地址,端口建立TCP鏈接,三次握手如下:
? ? - 客戶端發送一個TCP的SYN=1,Seq=X的包到服務器端口
? ? - 服務器發回SYN=1, ACK=X+1, Seq=Y的響應包
? ? - 客戶端發送ACK=Y+1, Seq=Z
- TCP鏈接建立后發送HTTP請求
- 服務器接受請求并解析,將請求轉發到服務程序,如虛擬主機使用HTTP Host頭部判斷請求的服務程序
- 服務器檢查HTTP請求頭是否包含緩存驗證信息如果驗證緩存新鮮,返回304等對應狀態碼
- 處理程序讀取完整請求并準備HTTP響應,可能需要查詢數據庫等操作
- 服務器將響應報文通過TCP連接發送回瀏覽器
- 瀏覽器接收HTTP響應,然后根據情況選擇關閉TCP連接或者保留重用,關閉TCP連接的四次握手如下:
? ? - 主動方發送Fin=1, Ack=Z, Seq= X報文
? ? - 被動方發送ACK=X+1, Seq=Z報文
? ? - 被動方發送Fin=1, ACK=X, Seq=Y報文
? ? - 主動方發送ACK=Y, Seq=X報文
- 瀏覽器檢查響應狀態嗎:是否為1XX,3XX, 4XX, 5XX,這些情況處理與2XX不同
- 如果資源可緩存,進行緩存
- 對響應進行解碼(例如gzip壓縮)
- 根據資源類型決定如何處理(假設資源為HTML文檔)
- 解析HTML文檔,構件DOM樹,下載資源,構造CSSOM樹,執行js腳本,這些操作沒有嚴格的先后順序,以下分別解釋
- 構建DOM樹:
? ? - Tokenizing:根據HTML規范將字符流解析為標記
? ? - Lexing:詞法分析將標記轉換為對象并定義屬性和規則
? ? - DOM construction:根據HTML標記關系將對象組成DOM樹
- 解析過程中遇到圖片、樣式表、js文件,啟動下載
- 構建CSSOM樹:
? ? - Tokenizing:字符流轉換為標記流
? ? - Node:根據標記創建節點
? ? - CSSOM:節點創建CSSOM樹
- 根據DOM樹和CSSOM樹構建渲染樹:
? ? - 從DOM樹的根節點遍歷所有可見節點,不可見節點包括:1)script,meta這樣本身不可見的標簽。2)被css隱藏的節點,如display: none
? ? - 對每一個可見節點,找到恰當的CSSOM規則并應用
? ? - 發布可視節點的內容和計算樣式
- js解析如下:
? ? - 瀏覽器創建Document對象并解析HTML,將解析到的元素和文本節點添加到文檔中,此時document.readystate為loading
? ? - HTML解析器遇到沒有async和defer的script時,將他們添加到文檔中,然后執行行內或外部腳本。這些腳本會同步執行,并且在腳本下載和執行時解析器會暫停。這樣就可以用document.write()把文本插入到輸入流中。同步腳本經常簡單定義函數和注冊事件處理程序,他們可以遍歷和操作script和他們之前的文檔內容
? ? - 當解析器遇到設置了async屬性的script時,開始下載腳本并繼續解析文檔。腳本會在它下載完成后盡快執行,但是解析器不會停下來等它下載。異步腳本禁止使用document.write(),它們可以訪問自己script和之前的文檔元素
? ? - 當文檔完成解析,document.readState變成interactive
? ? - 所有defer腳本會按照在文檔出現的順序執行,延遲腳本能訪問完整文檔樹,禁止使用document.write()
? ? - 瀏覽器在Document對象上觸發DOMContentLoaded事件
? ? - 此時文檔完全解析完成,瀏覽器可能還在等待如圖片等內容加載,等這些內容完成載入并且所有異步腳本完成載入和執行,document.readState變為complete,window觸發load事件
- 顯示頁面(HTML解析過程中會逐步顯示頁面)

轉載于:https://www.cnblogs.com/luoluoweb/p/5768099.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286630.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286630.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286630.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

有序的Map集合--LinkedHashMap

提出問題: 在寫一個dao的時候,我的需求是這個dao是一個萬能的,目前的方法只有一個查詢出實體類對應的表中所有的數據,通過傳入的對象,利用反射獲取實體類中的屬性名,屬性類型,利用字符串拼接獲取…

Leetcode之僅僅反轉字母

1 題目 給定一個字符串 S,返回 “反轉后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置發生反轉。 示例 1:輸入:"ab-cd" 輸出:"dc-ba" 示例 2:輸入:"a-bC-dEf-ghIj" 輸出:"j-Ih-gfE-dCba" 示例 3:輸入:&qu…

【SignalR全套系列】之在.Net Core 中實現長輪詢

微信公眾號:趣編程ACE關注可了解更多的.NET日常實戰開發技巧,如需源碼 請后臺留言 源碼;前文回顧【SignalR全套系列】之在.Net Core 中實現Server-Send Events消息推送【SignalR全套系列】之在.NetCore中實現WebSocket雙工通信【SignalR全套系列】之在.N…

完美解決ArcGIS10.2和Erdas9.2軟件沖突的方法:共存!

用過ArcGIS和Erdas軟件的都知道,二者存在著服務的沖突,為了解決共存的問題,筆者曾多次重裝系統,但未能如愿以償。其實不需要相互關閉服務如此麻煩。那如何在安裝有arcgis的電腦安裝erdas并解決沖突呢?直接上視頻教程。…

架構師之路16年精選50篇

2016精選索引,點擊標題閱讀相關文章。【方法論】《秒殺系統架構優化思路》《分布式ID生成器》《互聯網架構,如何進行容量設計》《線程數究竟設多少合理》《單點系統架構的可用性與性能優化》《關于負載均衡的一切》《異構服務器負載均衡及過載保護》《LV…

yii 前后臺分離及登陸驗證

2019獨角獸企業重金招聘Python工程師標準>>> 比較合理的做法其實是分成兩個框架來布署;然而這樣說法也太絕對。 事實上是針對不同系統,應采用不同的方法。如為CMS系統,則不需很復雜的權限管理,但如果有管理員與會員之分…

雙谷人才財務管理(序)

IT是一個迅速發展的行業,教育是一個良心的行業,兩者交集——IT培訓,在整個市場中占有一個不可或缺的地位。好多大學生,抱怨找不到工作;好多企業找不到合適的程序員,這幾年這個問題越來越嚴重。。。。于是IT…

Android之打開手機系統相冊

1、需求 打開系統相冊,獲取圖片進行掃描操作 2、代碼實現 Intent pickIntent new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");Ca…

Kibana

2019獨角獸企業重金招聘Python工程師標準>>> Kibana是一個基于瀏覽器頁面的Elasticsearch前端展示工具。Kibana全部使用HTML語言和Javascript編寫的,查詢語法是基于Lucene的查詢語法。允許布爾運算符、通配符和字段篩選。注意關鍵字要大寫 全文搜索 在搜…

電腦QQ能登上,網頁打不開的解決辦法

打開360衛士,在功能大全里選擇網絡優化,斷網急救箱。 可以看到DNS服務異常、瀏覽器配置異常,點擊立即修復。

個人黑名單 抄襲恥辱墻

抄襲恥辱墻 博主抄襲文原文我愛Python數據挖掘https://blog.csdn.net/weixin_38037405/article/details/125862095https://blog.csdn.net/A757291228/article/details/117464313黃埔數據分析https://blog.csdn.net/weixin_39060517/article/details/118024847https://blog.csdn…

快速掌握 ASP.NET 身份認證框架 Identity(一)

推薦關注「碼俠江湖」加星標,時刻不忘江湖事ASP.NET Core 內置了一個強大的身份認證框架 Identity,掌握它可以讓我們快速開發高安全的身份認證功能,不僅如此,它還是一個基于數據庫的用戶管理系統,其中包含了大量的輔助…

淺談大型web系統架構

動態應用,是相對于網站靜態內容而言,是指以c/c、php、Java、perl、.net等服務器端語言開發的網絡應用軟件,比如論壇、網絡相冊、交友、BLOG等常見應用。動態應用系統通常與數據庫系統、緩存系統、分布式存儲系統等密不可分。   大型動態應用…

Android之webview長按超鏈接類型獲取鏈接文字及url、長按圖片鏈接類型分別獲取圖片和鏈接的url

1 、需求 webview長按超鏈接獲取鏈接文字及urlwebview長按圖片鏈接類型獲分別獲取圖片和鏈接的url 2、解決辦法 1)、設置webview的OnLongClickListener事件,關鍵代碼如下 companion object {const val LINK_TYPE = 1const val IMAGE_LINK_TYPE = 2}var mHandler = object :…

PostgreSQL 統計信息pg_statistic格式及導入導出dump_stat - 兼容Oracle

標簽 PostgreSQL , dump_stat , 統計信息 , 導出導入 背景 《PostgreSQL 規格評估 - 微觀、宏觀、精準 多視角估算數據庫性能(選型、做預算不求人)》 EXPLAIN是PG數據庫用于輸出SQL執行計劃的語法, 1、生成的執行計劃中包含COST一項。 如果校準了成本因子&#xff0…

PHP: 手把手編寫自己的 MVC 框架實例教程

1 什么是MVC MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。 …

freemarker 異常處理

SSH2處理方案&#xff1a; freemarker文件如果出錯&#xff0c;網站的前臺頁面會報出很明顯的錯誤-焦黃的背景&#xff0c;血紅的文字&#xff0c;很不利于用戶體驗的。如何修改這個問題呢&#xff1f;首先需要在struts.xml配置文件里添加下面一行代碼&#xff1a; 1<consta…

ArcGIS10.8按屬性選擇中根據關鍵字like模糊查詢方法總結

在實際工作中,通常需要按照某一個或某幾個關鍵字進行模糊查詢,已到達快速、準確、高效查詢的目的。在ArcGIS中是通過SQL語句,利用關鍵字like來實現的。例如我們可以借助like快速查詢滿足以某一個關鍵字開頭,以某一個關鍵字結尾,或者包含某一個關鍵字的結果。 在ArcGIS中,…

2021年復盤總結發現了C站博主缺少的賺錢之路

一、 我2021年的六大Flag 其實最開始我是不打算年終總結的&#xff0c;因為2021年我的十大Flag都沒有完成&#xff0c;我說出來可能你會嘲笑我&#xff0c;所以我打算還是說出來吧。 這六大Flag如下&#xff1a; C站百萬粉百篇實戰文其他自媒體平臺十萬粉公眾號一萬粉財務自…

五大微信小程序開發IDE深度評測

微信小程序已經內測有一段時間了&#xff0c;筆者本著好奇加學習的心態寫了幾個小demo&#xff0c;雖然在MINA框架上并沒有遇到太多的坑&#xff0c;但官方開發工具實在不敢恭維。 api提示不全&#xff0c;要一個個查api啊&#xff0c;寫代碼超級慢啊 很多必備的快捷鍵都沒有&…