“约见”面试官系列之常见面试题第四十三篇之页面输入url之后发生了什么?(建议收藏)
本文主旨:幫助自己理清頁面輸入url地址之后的一個整體流程
?
首先,用戶第一次向服務(wù)器發(fā)送對應(yīng)url地址請求,此時,客戶端沒有緩存
1.用戶輸入url通過DNS解析為對應(yīng)的IP地址。
2.應(yīng)用層:HTTP協(xié)議生成針對目標Web服務(wù)器的HTTP請求報文。
3.傳輸層:TCP協(xié)議為了傳輸方便,將HTTP請求報文進行分割,并在各個報文上打上標記序號及端口號后轉(zhuǎn)發(fā)給網(wǎng)絡(luò)層。
4.網(wǎng)絡(luò)層:IP協(xié)議增加作為通信目的地的MAC地址后轉(zhuǎn)發(fā)給鏈路層。
接收端的服務(wù)器在鏈路層接收到數(shù)據(jù),按序往上層發(fā)送,一直到應(yīng)用層。
然后服務(wù)器將返回對應(yīng)請求,設(shè)置相應(yīng)的緩存
?
這中間還涉及一個面試很喜歡問的問題,就是TCP協(xié)議中的“三次握手,四次揮手”
握手過程中使用了TCP標志——SYN(synchronize)和ACK(acknowledgement)
1.發(fā)送端首先發(fā)送一個帶SYN標志的數(shù)據(jù)包給對方
2.接收端接收到后,回傳一個帶有SYN/ACK標志數(shù)據(jù)包表示傳達確認信息
3.發(fā)送端再回傳一個帶ACK標志的數(shù)據(jù)包,代表“握手結(jié)束”
四次揮手
1.客戶端(Client)發(fā)送中斷連接請求,發(fā)送FIN報文
2.服務(wù)端(Server)接收到FIN報文后,向客戶端發(fā)送ACK報文(反饋客戶端信息,你的請求我收到了,但是我還沒有準備好,請等待我的消息),這個時候客戶端就進入FIN-WAIT狀態(tài)
3.當服務(wù)端確定數(shù)據(jù)已發(fā)送完畢,則向客戶端發(fā)送FIN/ACK報文,告訴客戶端,我這邊數(shù)據(jù)發(fā)送完畢,可以關(guān)閉連接
4.客戶端收到信息后,就知道可以關(guān)閉連接了,但它不相信網(wǎng)絡(luò),怕服務(wù)端不知道要關(guān)閉,所以發(fā)送ACK報文后進入TIME_WAIT狀態(tài),如果服務(wù)端沒有收到ACK則可以重傳,服務(wù)端收到ACK后,就直到可以斷開連接了。客戶端等待2MSL后依然沒有收到回復(fù),則證明服務(wù)端已經(jīng)正常關(guān)閉,那好,客戶端也關(guān)閉連接。TCP連接關(guān)閉
?
?
當?shù)谝淮握埱笸瓿芍?#xff0c;以后再進行相應(yīng)請求時,就要討論緩存是否過期的問題了
看完這幅圖,有沒有什么大膽的想法~
根據(jù)這幅圖,一步一步理清關(guān)于頁面輸入url地址之后發(fā)生了什么這個問題
前提:客戶端對于上述url地址請求是有緩存的
Expires
首部字段Expires會將資源失效的日期告知客戶端。緩存服務(wù)器在接收到含有首部字段Expires的響應(yīng)后,會以緩存來應(yīng)答請求,在Expires字段值指定的時間之前,響應(yīng)的副本會一直被保存。當超過指定的時間后,緩存服務(wù)器在請求發(fā)送過來時,會轉(zhuǎn)向源服務(wù)器請求資源。
當緩存未過期時,頁面直接取緩存,進行頁面展示。
緩存過期后,進行Etag判斷
ETag
首部字段ETag能告訴客戶端實體標識。它是一種可將資源以字符串形式做唯一性標識的方式。服務(wù)器會為每份資源分配對應(yīng)ETag值。
另外,當資源更新時,ETag值也需要更新。生成ETag值時,并沒有統(tǒng)一的算法規(guī)則,而僅僅是由服務(wù)器來分配。
強ETag值:不論實體發(fā)生多么細微的變化都會改變其值。
弱ETag值:只用于提示資源是否相同。只有資源發(fā)生了根本改變,產(chǎn)生差異時才會改變ETag值。這時,會在字段值最開始處附加W/。
If-None-Match
屬于附帶條件之一。用于指定If-None-Match字段值的實體標記(ETag)值與請求資源的ETag不一致時,它就告知服務(wù)器處理該請求。
在GET或HEAD方法中使用首部字段If-None-Match可獲得最新的資源
Last-Modified
指明資源最終被修改的時間。
If-Modified-Since
附帶條件之一。
用于確認代理或客戶端擁有的本地資源的有效性。
它會告知服務(wù)器若If-Modified-Since字段值早于資源的更新時間,則希望能處理該請求。
而在指定字段值的日期時間之后,如果請求的資源都沒有更新過,則返回狀態(tài)碼304響應(yīng)。
200 OK
從客戶端發(fā)來的請求在服務(wù)器端被正常處理了。
304 Not Modified
服務(wù)器端資源未改變,可直接使用客戶端未過期的緩存。資源已找到,但未符合條件請求
表示客戶端發(fā)送附帶條件的請求時,服務(wù)器端允許請求訪問資源,但因發(fā)生請求未滿足條件的情況后,直接返回304。
總結(jié):
當頁面輸入url地址之后,首先進行是否有緩存的判斷,沒有緩存,正常通過向服務(wù)器發(fā)起請求獲取頁面資源
有緩存的話進行緩存是否過期等一系列判斷,最終將頁面資源展示出來
先走緩存,再服務(wù)器請求,一切以快速,簡捷為目的
?
上面只是簡單介紹了一下從輸入url到請求到頁面資源的過程,還有頁面展示,各種緩存的問題,有興趣的朋友可以自己研究一下,這里就先不做介紹
本面試題為前端常考面試題,后續(xù)有機會繼續(xù)完善。我是歌謠,一個沉迷于故事的講述者。
歡迎一起私信交流。
“睡服“面試官系列之各系列目錄匯總(建議學(xué)習(xí)收藏)?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的“约见”面试官系列之常见面试题第四十三篇之页面输入url之后发生了什么?(建议收藏)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自己动手写操作系统-经典书籍
- 下一篇: 工程力学:绪论与其它