-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
瀏覽器訪問(wèn)網(wǎng)站的流程(瀏覽器訪問(wèn)網(wǎng)站的基本流程)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于瀏覽器訪問(wèn)網(wǎng)站的流程的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、已知域名和訪問(wèn)端口怎么訪問(wèn)
每次進(jìn)入自己的網(wǎng)站都要輸入端口號(hào),很不舒服。于是今天查了一下,怎么用域名直接訪問(wèn)自己的網(wǎng)站。
帶端口和項(xiàng)目名稱的訪問(wèn)方式如下:
例如:www.xxx.com:8080/項(xiàng)目名
純域名訪問(wèn)解決方法:
在服務(wù)器的conf目錄下找到server.xml 將訪問(wèn)端口改為瀏覽器默認(rèn)訪問(wèn)端口80
<Connector executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
登錄后復(fù)制
將port 的值改為80
2.直接訪問(wèn)文件
依舊是tomact里conf/sever.xml文件
在host標(biāo)簽里加上如下配置:
<Context path="" docBase="C:\soft\idea\idea\apache-tomcat-8.5.47\webapps\項(xiàng)目名" debug="0" reloadable="true" />
登錄后復(fù)制
注:此處docBase的值為你本機(jī)tomact的路徑
下圖為我的電腦的配置:
最后重啟tomact,OK成功了
我是樂(lè)樂(lè)呀,感謝您的閱讀。如果您覺(jué)得不錯(cuò),那就點(diǎn)個(gè)贊吧,您的支持是我最大的動(dòng)力。謝謝
http
tomcat
江詩(shī)丹頓名表維修,專業(yè)技術(shù),正品配件更換
精選推薦
廣告

瀏覽器通過(guò)網(wǎng)路域名訪問(wèn)網(wǎng)址過(guò)程
1175閱讀·0評(píng)論·0點(diǎn)贊
2020年8月25日
將域名直接映射到網(wǎng)站首頁(yè)(通過(guò)域名即可訪問(wèn)網(wǎng)站首頁(yè))
1.8W閱讀·11評(píng)論·2點(diǎn)贊
2018年11月28日
【免費(fèi)】多種方法手把手教你如何將自己做的網(wǎng)頁(yè)做成網(wǎng)絡(luò)鏈接(直接訪問(wèn))
8408閱讀·65評(píng)論·121點(diǎn)贊
2022年11月13日
域名直接訪問(wèn)web首頁(yè)
2905閱讀·0評(píng)論·0點(diǎn)贊
2019年3月17日
瀏覽器輸入域名訪問(wèn)全流程解析
4514閱讀·1評(píng)論·4點(diǎn)贊
2021年8月12日
域名訪問(wèn)網(wǎng)站首頁(yè)的一種簡(jiǎn)單方式
1824閱讀·0評(píng)論·2點(diǎn)贊
2017年4月13日
使用域名訪問(wèn)網(wǎng)站或者靜態(tài)頁(yè)面
5390閱讀·0評(píng)論·0點(diǎn)贊
2022年8月9日
怎樣才能使用域名訪問(wèn)網(wǎng)站?
2.3W閱讀·0評(píng)論·5點(diǎn)贊
2022年3月1日
可以直接訪問(wèn)網(wǎng)址“glgoo.com”或“scholar.glgoo.com”便可以直接打開(kāi)谷歌或谷歌學(xué)術(shù)
2545閱讀·0評(píng)論·0點(diǎn)贊
2018年11月26日
各大搜索引擎網(wǎng)站登錄入口
654閱讀·0評(píng)論·0點(diǎn)贊
2007年10月3日
使用域名訪問(wèn)服務(wù)器網(wǎng)站,使用域名訪問(wèn)網(wǎng)站是啥意思
3534閱讀·0評(píng)論·1點(diǎn)贊
2021年8月4日
域名訪問(wèn)和ip訪問(wèn)區(qū)別
8674閱讀·0評(píng)論·1點(diǎn)贊
2019年9月26日
如果通過(guò)訪問(wèn)域名就能訪問(wèn)到網(wǎng)站首頁(yè)
1295閱讀·0評(píng)論·0點(diǎn)贊
2019年7月11日
網(wǎng)站域名訪問(wèn)
685閱讀·0評(píng)論·0點(diǎn)贊
2022年4月21日
最實(shí)用的上網(wǎng)網(wǎng)址一覽表
3016閱讀·0評(píng)論·0點(diǎn)贊
2022年2月14日
如何直接通過(guò)域名訪問(wèn)頁(yè)面,無(wú)需添加端口號(hào)(nginx反向代理實(shí)現(xiàn)直接域名訪問(wèn))
1.3W閱讀·16評(píng)論·15點(diǎn)贊
2021年11月3日
域名指向主機(jī)IP地址,通過(guò)域名:8080才能訪問(wèn)網(wǎng)站,去掉后面的8080;或者其他的端口號(hào),直接使用域名訪問(wèn)網(wǎng)站
二、最全從輸入U(xiǎn)RL到瀏覽器顯示頁(yè)面都發(fā)生了什么前端瀏覽器渲染流程
首先了解一下URL的組成:
從上面的URL可以看出,一個(gè)完整的URL包括以下幾部分:
1、協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁(yè)使用的是HTTP協(xié)議。在Internet中可以使用多種協(xié)議,如HTTP,F(xiàn)TP等等本例中使用的是HTTP協(xié)議。在"HTTP"后面的“//”為分隔符
2、域名部分:該URL的域名部分為“www.baidu.com”。一個(gè)URL中,也可以使用IP地址作為域名使用
3、端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個(gè)URL必須的部分,如果省略端口部分,將采用默認(rèn)端口80
4、虛擬目錄部分:從域名后的第一個(gè)“/”開(kāi)始到最后一個(gè)“/”為止,是虛擬目錄部分。虛擬目錄也不是一個(gè)URL必須的部分。本例中的虛擬目錄是“/news/”
5、文件名部分:從域名后的最后一個(gè)“/”開(kāi)始到“?”為止,是文件名部分,如果沒(méi)有“?”,則是從域名后的最后一個(gè)“/”開(kāi)始到“#”為止,是文件部分,如果沒(méi)有“?”和“#”,那么從域名后的最后一個(gè)“/”開(kāi)始到結(jié)束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分,如果省略該部分,則使用默認(rèn)的文件名
6、錨部分:從“#”開(kāi)始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個(gè)URL必須的部分
7、參數(shù)部分:從“?”開(kāi)始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個(gè)參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。
很多大公司面試喜歡問(wèn)這樣一道面試題, 輸入U(xiǎn)RL到看見(jiàn)頁(yè)面發(fā)生了什么? ,今天我們來(lái)總結(jié)一下。 簡(jiǎn)單來(lái)說(shuō),共有以下幾個(gè)過(guò)程
下面我們來(lái)看看具體的細(xì)節(jié)
輸入 www.google.com 網(wǎng)址后,首先在本地的域名服務(wù)器中查找,沒(méi)找到去根域名服務(wù)器查找,沒(méi)有再去 com 頂級(jí)域名服務(wù)器查找,,如此的類推下去,直到找到IP地址,然后把它記錄在本地,供下次使用。大致過(guò)程就是 . -> .com -> google.com. -> www.google.com. 。 (你可能覺(jué)得我多寫 .,并木有,這個(gè).對(duì)應(yīng)的就是根域名服務(wù)器,默認(rèn)情況下所有的網(wǎng)址的最后一位都是.,既然是默認(rèn)情況下,為了方便用戶,通常都會(huì)省略,瀏覽器在請(qǐng)求DNS的時(shí)候會(huì)自動(dòng)加上)
既然已經(jīng)懂得了解析的具體過(guò)程,我們可以看到上述一共經(jīng)過(guò)了N個(gè)過(guò)程,每個(gè)過(guò)程有一定的消耗和時(shí)間的等待,因此我們得想辦法解決一下這個(gè)問(wèn)題!
DNS存在著多級(jí)緩存,從離瀏覽器的距離排序的話,有以下幾種: 瀏覽器緩存,系統(tǒng)緩存,路由器緩存,IPS服務(wù)器緩存,根域名服務(wù)器緩存,頂級(jí)域名服務(wù)器緩存,主域名服務(wù)器緩存。
在你的chrome瀏覽器中輸入:chrome://dns/,你可以看到chrome瀏覽器的DNS緩存。
系統(tǒng)緩存主要存在/etc/hosts(Linux系統(tǒng))中
檢查瀏覽器是否有緩存
通過(guò) Cache-Control 和 Expires 來(lái)檢查是否命中強(qiáng)緩存,命中則直接取本地磁盤的html(狀態(tài)碼為200 from disk(or memory) cache,內(nèi)存or磁盤);
如果沒(méi)有命中強(qiáng)緩存,則會(huì)向服務(wù)器發(fā)起請(qǐng)求(先進(jìn)行下一步的TCP連接),服務(wù)器通過(guò) Etag 和 Last-Modify 來(lái)與服務(wù)器確認(rèn)返回的響應(yīng)是否被更改(協(xié)商緩存),若無(wú)更改則返回狀態(tài)碼(304 Not Modified),瀏覽器取本地緩存;
若強(qiáng)緩存和協(xié)商緩存都沒(méi)有命中則返回請(qǐng)求結(jié)果。
不知道你們有沒(méi)有注意這樣一件事,你訪問(wèn)http://baidu.com的時(shí)候,每次響應(yīng)的并非是同一個(gè)服務(wù)器(IP地址不同),一般大公司都有成百上千臺(tái)服務(wù)器來(lái)支撐訪問(wèn),假設(shè)只有一個(gè)服務(wù)器,那它的性能和存儲(chǔ)量要多大才能支撐這樣大量的訪問(wèn)呢?DNS可以返回一個(gè)合適的機(jī)器的IP給用戶,例如可以根據(jù)每臺(tái)機(jī)器的負(fù)載量,該機(jī)器離用戶地理位置的距離等等,這種過(guò)程就是DNS負(fù)載均衡
TCP 協(xié)議通過(guò)三次握手建立連接。
翻譯成大白話就是:
為什么是3次? :避免 歷史 連接,確認(rèn)客戶端發(fā)來(lái)的請(qǐng)求是這次通信的人。
為什么不是4次? :3次夠了第四次浪費(fèi)
建立連接的過(guò)程是利用客戶服務(wù)器模式,假設(shè)主機(jī)A為客戶端,主機(jī)B為服務(wù)器端。
采用三次握手是為了防止失效的連接請(qǐng)求報(bào)文段突然又傳送到主機(jī)B,因而產(chǎn)生錯(cuò)誤。失效的連接請(qǐng)求報(bào)文段是指:主機(jī)A發(fā)出的連接請(qǐng)求沒(méi)有收到主機(jī)B的確認(rèn),于是經(jīng)過(guò)一段時(shí)間后,主機(jī)A又重新向主機(jī)B發(fā)送連接請(qǐng)求,且建立成功,順序完成數(shù)據(jù)傳輸??紤]這樣一種特殊情況,主機(jī)A第一次發(fā)送的連接請(qǐng)求并沒(méi)有丟失,而是因?yàn)榫W(wǎng)絡(luò)節(jié)點(diǎn)導(dǎo)致延遲達(dá)到主機(jī)B,主機(jī)B以為是主機(jī)A又發(fā)起的新連接,于是主機(jī)B同意連接,并向主機(jī)A發(fā)回確認(rèn),但是此時(shí)主機(jī)A根本不會(huì)理會(huì),主機(jī)B就一直在等待主機(jī)A發(fā)送數(shù)據(jù),導(dǎo)致主機(jī)B的資源浪費(fèi)。
采用兩次握手不行,原因就是上面說(shuō)的失效的連接請(qǐng)求的特殊情況。而在三次握手中, client和server都有一個(gè)發(fā)syn和收ack的過(guò)程, 雙方都是發(fā)后能收, 表明通信則準(zhǔn)備工作OK.
為什么不是四次握手呢? 大家應(yīng)該知道通信中著名的藍(lán)軍紅軍約定, 這個(gè)例子說(shuō)明, 通信不可能100%可靠, 而上面的三次握手已經(jīng)做好了通信的準(zhǔn)備工作, 再增加握手, 并不能顯著提高可靠性, 而且也沒(méi)有必要。
第一次握手 :
客戶端發(fā)送syn包(Seq=x)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:
服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=x+1),同時(shí)自己也發(fā)送一個(gè)SYN包(Seq=y),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:
客戶端收到服務(wù)器的SYN ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
握手過(guò)程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開(kāi)始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP 連接都將被一直保持下去。
要先申請(qǐng)CA證書,并安裝在服務(wù)器上(一個(gè)文件,配置nginx支持監(jiān)聽(tīng)443端口開(kāi)啟ssl并設(shè)置證書路徑)
瀏覽器發(fā)送請(qǐng)求;
網(wǎng)站從瀏覽器發(fā)過(guò)來(lái)的加密規(guī)則中選一組自身也支持的加密算法和hash算法,并向?yàn)g覽器發(fā)送帶有公鑰的證書,當(dāng)然證書還包含了很多信息,如網(wǎng)站地址、證書的頒發(fā)機(jī)構(gòu)、過(guò)期時(shí)間等。
瀏覽器解析證書。
驗(yàn)證證書的合法性。如頒發(fā)機(jī)構(gòu)是否合法、證書中的網(wǎng)站地址是否與訪問(wèn)的地址一致,若不合法,則瀏覽器提示證書不受信任,若合法,瀏覽器會(huì)顯示一個(gè)小鎖頭。
若合法,或用戶接受了不合法的證書,瀏覽器會(huì)生成一串隨機(jī)數(shù)的密碼(即密鑰),并用證書中提供的公鑰加密。
使用約定好的hash計(jì)算握手消息,并使用生成的隨機(jī)數(shù)(即密鑰)對(duì)消息進(jìn)行加密,最后將之前生成的所有消息一并發(fā)送給網(wǎng)站服務(wù)器。
網(wǎng)站服務(wù)器解析消息。用已有的私鑰將密鑰解密出來(lái),然后用密鑰解密發(fā)過(guò)來(lái)的握手消息,并驗(yàn)證是否跟瀏覽器傳過(guò)來(lái)的一致。然后再用密鑰加密一段握手消息,發(fā)送給瀏覽器。
瀏覽器解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來(lái)的HASH一致,此時(shí)握手過(guò)程結(jié)束,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對(duì)稱加密算法進(jìn)行加密。這里瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗(yàn)證,目的是為了保證雙方都獲得了一致的密碼,并且可以正常的加密解密數(shù)據(jù),為后續(xù)真正數(shù)據(jù)的傳輸做一次測(cè)試。
發(fā)送HTTP請(qǐng)求
首先科補(bǔ)一個(gè)小知識(shí),HTTP的端口為80/8080,而HTTPS的端口為443
發(fā)送HTTP請(qǐng)求的過(guò)程就是構(gòu)建HTTP請(qǐng)求報(bào)文并通過(guò)TCP協(xié)議中發(fā)送到服務(wù)器指定端口 請(qǐng)求報(bào)文由 請(qǐng)求行 , 請(qǐng)求抱頭 , 請(qǐng)求正文 組成。
請(qǐng)求行
請(qǐng)求行的格式為 Method Request-URL HTTP-Version CRLF eg: GET index.html HTTP/1.1 常用的方法有: GET , POST , PUT , DELETE , OPTIONS , HEAD 。
常見(jiàn)的請(qǐng)求方法區(qū)別
這里主要展示 POST 和 GET 的區(qū)別
常見(jiàn)的區(qū)別
注意一點(diǎn)你也可以在GET里面藏body,POST里面帶參數(shù)
重點(diǎn)區(qū)別
GET 會(huì)產(chǎn)生一個(gè) TCP 數(shù)據(jù)包,而 POST 會(huì)產(chǎn)生兩個(gè) TCP 數(shù)據(jù)包。
詳細(xì)的說(shuō)就是:
注意一點(diǎn),并不是所有的瀏覽器都會(huì)發(fā)送兩次數(shù)據(jù)包,F(xiàn)irefox就發(fā)送一次
請(qǐng)求報(bào)頭
請(qǐng)求報(bào)頭允許客戶端向服務(wù)器傳遞請(qǐng)求的附加信息和客戶端自身的信息。
從圖中可以看出,請(qǐng)求報(bào)頭中使用了Accept, Accept-Encoding, Accept-Language, Cache-Control, Connection, Cookie等字段。Accept用于指定客戶端用于接受哪些類型的信息,Accept-Encoding與Accept類似,它用于指定接受的編碼方式。Connection設(shè)置為Keep-alive用于告訴客戶端本次HTTP請(qǐng)求結(jié)束之后并不需要關(guān)閉TCP連接,這樣可以使下次HTTP請(qǐng)求使用相同的TCP通道,節(jié)省TCP連接建立的時(shí)間。
請(qǐng)求正文
當(dāng)使用POST, PUT等方法時(shí),通常需要客戶端向服務(wù)器傳遞數(shù)據(jù)。這些數(shù)據(jù)就儲(chǔ)存在請(qǐng)求正文中。在請(qǐng)求包頭中有一些與請(qǐng)求正文相關(guān)的信息,例如: 現(xiàn)在的Web應(yīng)用通常采用Rest架構(gòu),請(qǐng)求的數(shù)據(jù)格式一般為json。這時(shí)就需要設(shè)置 Content-Type: application/json 。
更重要的事情-HTTP緩存
HTTP屬于客戶端緩存,我們常認(rèn)為瀏覽器有一個(gè)緩存數(shù)據(jù)庫(kù),用來(lái)保存一些靜態(tài)文件,下面我們分為以下幾個(gè)方面來(lái)簡(jiǎn)單介紹HTTP緩存
緩存的規(guī)則
緩存規(guī)則分為 強(qiáng)制緩存 和 協(xié)商緩存
強(qiáng)制緩存
當(dāng)緩存數(shù)據(jù)庫(kù)中有客戶端需要的數(shù)據(jù),客戶端直接將數(shù)據(jù)從其中拿出來(lái)使用(如果數(shù)據(jù)未失效),當(dāng)緩存服務(wù)器沒(méi)有需要的數(shù)據(jù)時(shí),客戶端才會(huì)向服務(wù)端請(qǐng)求。
又稱對(duì)比緩存??蛻舳藭?huì)先從緩存數(shù)據(jù)庫(kù)拿到一個(gè)緩存的標(biāo)識(shí),然后向服務(wù)端驗(yàn)證標(biāo)識(shí)是否失效,如果沒(méi)有失效服務(wù)端會(huì)返回304,這樣客戶端可以直接去緩存數(shù)據(jù)庫(kù)拿出數(shù)據(jù),如果失效,服務(wù)端會(huì)返回新的數(shù)據(jù)
強(qiáng)制緩存
對(duì)于強(qiáng)制緩存,服務(wù)器響應(yīng)的header中會(huì)用兩個(gè)字段來(lái)表明——Expires和Cache-Control。
Expires
Exprires的值為服務(wù)端返回的數(shù)據(jù)到期時(shí)間。當(dāng)再次請(qǐng)求時(shí)的請(qǐng)求時(shí)間小于返回的此時(shí)間,則直接使用緩存數(shù)據(jù)。但由于服務(wù)端時(shí)間和客戶端時(shí)間可能有誤差,這也將導(dǎo)致緩存命中的誤差,另一方面,Expires是HTTP1.0的產(chǎn)物,故現(xiàn)在大多數(shù)使用Cache-Control替代。
Cache-Control
Cache-Control有很多屬性,不同的屬性代表的意義也不同。
協(xié)商緩存
協(xié)商緩存需要進(jìn)行對(duì)比判斷是否可以使用緩存。瀏覽器第一次請(qǐng)求數(shù)據(jù)時(shí),服務(wù)器會(huì)將緩存標(biāo)識(shí)與數(shù)據(jù)一起響應(yīng)給客戶端,客戶端將它們備份至緩存中。再次請(qǐng)求時(shí),客戶端會(huì)將緩存中的標(biāo)識(shí)發(fā)送給服務(wù)器,服務(wù)器根據(jù)此標(biāo)識(shí)判斷。若未失效,返回304狀態(tài)碼,瀏覽器拿到此狀態(tài)碼就可以直接使用緩存數(shù)據(jù)了。
對(duì)于協(xié)商緩存來(lái)說(shuō),緩存標(biāo)識(shí)我們需要著重理解一下,下面我們將著重介紹它的兩種緩存方案。
Last-Modified
Last-Modified:服務(wù)器在響應(yīng)請(qǐng)求時(shí),會(huì)告訴瀏覽器資源的最后修改時(shí)間。
從字面上看,就是說(shuō):從某個(gè)時(shí)間節(jié)點(diǎn)算起,是否文件被修改了
這兩個(gè)的區(qū)別是一個(gè)是修改了才下載一個(gè)是沒(méi)修改才下載。
Last-Modified 說(shuō)好卻也不是特別好,因?yàn)槿绻诜?wù)器上,一個(gè)資源被修改了,但其實(shí)際內(nèi)容根本沒(méi)發(fā)生改變,會(huì)因?yàn)長(zhǎng)ast-Modified時(shí)間匹配不上而返回了整個(gè)實(shí)體給客戶端(即使客戶端緩存里有個(gè)一模一樣的資源)。為了解決這個(gè)問(wèn)題,HTTP1.1推出了Etag。
Etag
Etag:服務(wù)器響應(yīng)請(qǐng)求時(shí),通過(guò)此字段告訴瀏覽器當(dāng)前資源在服務(wù)器生成的唯一標(biāo)識(shí)(生成規(guī)則由服務(wù)器決定)
但是實(shí)際應(yīng)用中由于Etag的計(jì)算是使用算法來(lái)得出的,而算法會(huì)占用服務(wù)端計(jì)算的資源,所有服務(wù)端的資源都是寶貴的,所以就很少使用Etag了。
緩存的優(yōu)點(diǎn)
不同刷新的請(qǐng)求執(zhí)行過(guò)程
瀏覽器地址欄中寫入U(xiǎn)RL,回車
F5
Ctrl+F5
服務(wù)器處理請(qǐng)求并返回HTTP報(bào)文
它會(huì)對(duì)TCP連接進(jìn)行處理,對(duì)HTTP協(xié)議進(jìn)行解析,并按照?qǐng)?bào)文格式進(jìn)一步封裝成HTTP Request對(duì)象,供上層使用。這一部分工作一般是由Web服務(wù)器去進(jìn)行,我使用過(guò)的Web服務(wù)器有Tomcat, Nginx和Apache等等 HTTP報(bào)文也分成三份, 狀態(tài)碼 , 響應(yīng)報(bào)頭 和 響應(yīng)報(bào)文
狀態(tài)碼
狀態(tài)碼是由3位數(shù)組成,第一個(gè)數(shù)字定義了響應(yīng)的類別,且有五種可能取值:
平時(shí)遇到比較常見(jiàn)的狀態(tài)碼有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500
常見(jiàn)狀態(tài)碼區(qū)別
200 成功
請(qǐng)求成功,通常服務(wù)器提供了需要的資源。
204 無(wú)內(nèi)容
服務(wù)器成功處理了請(qǐng)求,但沒(méi)有返回任何內(nèi)容。
301 永久移動(dòng)
請(qǐng)求的網(wǎng)頁(yè)已永久移動(dòng)到新位置。 服務(wù)器返回此響應(yīng)(對(duì) GET 或 HEAD 請(qǐng)求的響應(yīng))時(shí),會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置。
302 臨時(shí)移動(dòng)
服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求。
304 未修改
自從上次請(qǐng)求后,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)。 服務(wù)器返回此響應(yīng)時(shí),不會(huì)返回網(wǎng)頁(yè)內(nèi)容。
400 錯(cuò)誤請(qǐng)求
服務(wù)器不理解請(qǐng)求的語(yǔ)法。
401 未授權(quán)
請(qǐng)求要求身份驗(yàn)證。 對(duì)于需要登錄的網(wǎng)頁(yè),服務(wù)器可能返回此響應(yīng)。
403 禁止
服務(wù)器拒絕請(qǐng)求。
404 未找到
服務(wù)器找不到請(qǐng)求的網(wǎng)頁(yè)。
422 無(wú)法處理
請(qǐng)求格式正確,但是由于含有語(yǔ)義錯(cuò)誤,無(wú)法響應(yīng)
500 服務(wù)器內(nèi)部錯(cuò)誤
服務(wù)器遇到錯(cuò)誤,無(wú)法完成請(qǐng)求。
響應(yīng)報(bào)頭
常見(jiàn)的響應(yīng)報(bào)頭字段有: Server, Connection...。
響應(yīng)報(bào)文
你從服務(wù)器請(qǐng)求的HTML,CSS,JS文件就放在這里面
就是 Webkit 解析渲染頁(yè)面的過(guò)程。
這個(gè)過(guò)程涉及兩個(gè)比較重要的概念 回流 和 重繪 ,DOM結(jié)點(diǎn)都是以盒模型形式存在,需要瀏覽器去計(jì)算位置和寬度等,這個(gè)過(guò)程就是回流。等到頁(yè)面的寬高,大小,顏色等屬性確定下來(lái)后,瀏覽器開(kāi)始繪制內(nèi)容,這個(gè)過(guò)程叫做重繪。瀏覽器剛打開(kāi)頁(yè)面一定要經(jīng)過(guò)這兩個(gè)過(guò)程的,但是這個(gè)過(guò)程非常非常非常消耗性能,所以我們應(yīng)該盡量減少頁(yè)面的回流和重繪
這個(gè)過(guò)程中可能會(huì)有dom操作、ajax發(fā)起的http網(wǎng)絡(luò)請(qǐng)求等。
web-socket、ajax等,這個(gè)過(guò)程通常是為了獲取數(shù)據(jù)
setTimeout、setInterval、Promise等宏任務(wù)、微任務(wù)隊(duì)列
當(dāng)Render Tree中部分或全部元素的尺寸、結(jié)構(gòu)、或某些屬性發(fā)生改變時(shí),瀏覽器重新渲染部分或全部文檔的過(guò)程稱為回流。
會(huì)導(dǎo)致回流的操作:
一些常用且會(huì)導(dǎo)致回流的屬性和方法:
當(dāng)頁(yè)面中元素樣式的改變并不影響它在文檔流中的位置時(shí)(例如:color、background-color、visibility等),瀏覽器會(huì)將新樣式賦予給元素并重新繪制它,這個(gè)過(guò)程稱為重繪。
JS的解析是由瀏覽器的JS引擎完成的。由于JavaScript是單線程運(yùn)行,也就是說(shuō)一個(gè)時(shí)間只能干一件事,干這件事情時(shí)其他事情都有排隊(duì),但是有些人物比較耗時(shí)(例如IO操作),所以將任務(wù)分為 同步任務(wù) 和 異步任務(wù) ,所有的同步任務(wù)放在主線程上執(zhí)行,形成執(zhí)行棧,而異步任務(wù)等待,當(dāng)執(zhí)行棧被清空時(shí)才去看看異步任務(wù)有沒(méi)有東西要搞,有再提取到主線程執(zhí)行,這樣往復(fù)循環(huán)(冤冤相報(bào)何時(shí)了,阿彌陀佛),就形成了Event Loop事件循環(huán),下面來(lái)看看大人物
先看一段代碼
結(jié)果我想大家都應(yīng)該知道。主要來(lái)介紹JavaScript的解析,至于Promise等下一節(jié)再說(shuō)
JavaScript是一門單線程語(yǔ)言,盡管H5中提出了 Web-Worker ,能夠模擬實(shí)現(xiàn)多線程,但本質(zhì)上還是單線程,說(shuō)它是多線程就是扯淡。
既然是單線程,每個(gè)事件的執(zhí)行就要有順序,比如你去銀行取錢,前面的人在進(jìn)行,后面的就得等待,要是前面的人弄個(gè)一兩個(gè)小時(shí),估計(jì)后面的人都瘋了,因此,瀏覽器的JS引擎處理JavaScript時(shí)分為 同步任務(wù) 和 異步任務(wù)
這張圖我們可以清楚看到
js引擎存在monitoring process進(jìn)程,會(huì)持續(xù)不斷的檢查主線程執(zhí)行棧是否為空,一旦為空,就會(huì)去Event Queue那里檢查是否有等待被調(diào)用的函數(shù)。 估計(jì)看完這些你對(duì)事件循環(huán)有一定的了解,但是事實(shí)上我們看對(duì)的沒(méi)這么簡(jiǎn)單,通常我們會(huì)看到Promise,setTimeout,process.nextTick(),這個(gè)時(shí)候你和我就懵逼。
不同任務(wù)會(huì)進(jìn)入不同的任務(wù)隊(duì)列來(lái)執(zhí)行。 JS引擎開(kāi)始工作后,先在宏任務(wù)中開(kāi)始第一次循環(huán)( script里面先執(zhí)行,不過(guò)我喜歡把它拎出來(lái),直接稱其進(jìn)入執(zhí)行棧 ),當(dāng)主線程執(zhí)行棧全部任務(wù)被清空后去微任務(wù)看看,如果有等待執(zhí)行的任務(wù),執(zhí)行全部的微任務(wù)(其實(shí)將其回調(diào)函數(shù)推入執(zhí)行棧來(lái)執(zhí)行),再去宏任務(wù)找最先進(jìn)入隊(duì)列的任務(wù)執(zhí)行,執(zhí)行這個(gè)任務(wù)后再去主線程執(zhí)行任務(wù)(例如執(zhí)行```console.log("hello world")這種任務(wù)),執(zhí)行棧被清空后再去微任務(wù),這樣往復(fù)循環(huán)(冤冤相報(bào)何時(shí)了)
下面來(lái)看一段代碼
我們看看它的執(zhí)行情況
具體的執(zhí)行過(guò)程大致就是這樣。
三、訪問(wèn)網(wǎng)站的過(guò)程?
1,瀏覽器通常指 IE FireFox等,客戶端使用的程序
2,每臺(tái)連接互聯(lián)網(wǎng)的機(jī)器都有一個(gè)唯一的IP地址,IP地址是由4個(gè)0到256的數(shù)組成的,比如:222.131.0.229,127.0.0.1,由于每臺(tái)聯(lián)網(wǎng)的機(jī)器的IP地址都是獨(dú)立的,因此可以通過(guò)IP判斷一臺(tái)機(jī)器。
網(wǎng)站所在的服務(wù)器通常有一個(gè)固定的IP地址,而我們?yōu)g覽者每次上網(wǎng)的IP地址通常都不一樣,IP地址是由ISP分配的。
域名服務(wù)器(domain name server)的簡(jiǎn)稱為DNS,它存儲(chǔ)了域名與IP地址對(duì)應(yīng)的列表。
3,瀏覽器得到域名指向的IP后,瀏覽器會(huì)把我們輸入的域名轉(zhuǎn)化為HTTP的服務(wù)請(qǐng)求,例如,輸入 www.mayi1992.com,可以轉(zhuǎn)化為 http://www.mayi1992.com/,通過(guò)這種方式瀏覽器向服務(wù)器發(fā)出了請(qǐng)求。
由于輸入的是域名,因此服務(wù)器接收到請(qǐng)求后,會(huì)查找域名下的默認(rèn)網(wǎng)頁(yè)(通常為default.php或default.html),如果直接輸入http://www.mayi1992.com/default.php就直接查找這個(gè)頁(yè)面。
4,返回的請(qǐng)求通常是一些文件,包括文字信息(.html .css .asp文件等),圖片,flash等(每個(gè)文件都要有一個(gè)唯一的網(wǎng)址,比如 http://www.mayi1992.com/xhtml/)
5,瀏覽器將這些信息組織成用戶可以查看的網(wǎng)頁(yè)
四、了解為何我們?yōu)g覽器中輸入網(wǎng)址,就能看到網(wǎng)頁(yè)了,流程如怎么樣的?
因?yàn)橛蠨NS,DNS
是域名系統(tǒng)
(Domain
Name
System)
的縮寫,該系統(tǒng)用于命名組織到域?qū)哟谓Y(jié)構(gòu)中的計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù)。在Internet上域名與IP地址之間是一對(duì)一(或者多對(duì)一)的,域名雖然便于人們記憶,但機(jī)器之間只能互相認(rèn)識(shí)IP地址,它們之間的轉(zhuǎn)換工作稱為域名解析,域名解析需要由專門的域名解析服務(wù)器來(lái)完成,DNS就是進(jìn)行域名解析的服務(wù)器。
DNS
命名用于
Internet
等
TCP/IP
網(wǎng)絡(luò)中,通過(guò)用戶友好的名稱查找計(jì)算機(jī)和服務(wù)。當(dāng)用戶在應(yīng)用程序中輸入
DNS
名稱時(shí),DNS
服務(wù)可以將此名稱解析為與之相關(guān)的其他信息,如
IP
地址。因?yàn)?,你在上網(wǎng)時(shí)輸入的網(wǎng)址,是通過(guò)域名解析系統(tǒng)解析找到了相對(duì)應(yīng)的IP地址,這樣才能上網(wǎng)。其實(shí),域名的最終指向是IP。
以上就是關(guān)于瀏覽器訪問(wèn)網(wǎng)站的流程相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
怎么強(qiáng)制關(guān)閉瀏覽器網(wǎng)頁(yè)(怎么強(qiáng)制關(guān)閉瀏覽器網(wǎng)頁(yè)窗口)
瀏覽不良網(wǎng)站10次讓去派出所(瀏覽不良網(wǎng)站10次讓去派出所會(huì)打電話嗎-)