前言:本月博主去面試了,會分類寫面試題分享給大家的,前端領域,共同進步!
文章目錄
- Q1: http協議中,從用戶輸入url地址,會發生什么?
- A1:會發生從決議url到渲染頁面的程序,
- Q1-1:瀏覽器是怎么渲染的呢?CSS/DOM這些,
- A1-1:程序如下,
- Q2: http協議中,快取機制有哪些,如何命中?
- A2:強快取、協商快取,
- Q3: http協議中,常見的狀態碼有哪些?
- A3:以2開頭的代表的成功的回傳,以3開頭代表重定向,以4開頭是客戶端、用戶操作的問題,以5開頭是服務器端的錯誤,
- Q4:http協議 與 https協議 有什么區別?
- A4:http協議是明文傳輸,https協議是http協議+ssl協議構建的,加密傳輸協議,
- Q5: TCP和UDP的區別
- A5: 區別如下,
上一篇是 TypeScript相關問題,點擊超鏈接查看,
Q1: http協議中,從用戶輸入url地址,會發生什么?
A1:會發生從決議url到渲染頁面的程序,
- 首先瀏覽器會決議url,查看本地快取(瀏覽器快取、系統快取、路由快取等),如果有則直接顯示,
- 如果都沒有,則進行DNS域名決議,決議出對應的IP地址,
- 瀏覽器與服務器三次握手,成功建立TCP連接,,
- 瀏覽器發出http請求,
- 服務器收到請求,回傳資源,
- 瀏覽器接收資料后,進行決議、渲染,
- 最后顯示出頁面,
由于提到了瀏覽器渲染,有些面試官就會接著問下去,
Q1-1:瀏覽器是怎么渲染的呢?CSS/DOM這些,
A1-1:程序如下,
- 決議HTML,生成DOM樹,
- 決議CSS,生成CSSOM樹,
- 將DOM和CSSOM合并,生成渲染樹(Render-Tree),
- 計算渲染樹的布局Layout, 將布局Paint渲染到螢屏上,
如圖所示(原創勿盜):

還可能涉及到回流、重繪的問題,
本篇文章主要是http協議相關,不過多贅述渲染問題,將文章看完,再點擊 這里, 有很詳細的瀏覽器渲染的資料推薦給大家,
Q2: http協議中,快取機制有哪些,如何命中?
A2:強快取、協商快取,
強快取與協商快取的命中,由回應頭Response Headers確定(服務器回傳),
-
強快取:回應頭中的 status 是 200,相關欄位有
expires(http1.0),cache-control(http1.1),兩者同時出現時 cache-control 優先級更高,主要是利用cache-control的max-age值來進行判斷,瀏覽器再次請求服務器時,瀏覽器會先判斷max-age,如果到期則直接請求服務器,否則直接從快取中讀取,
回應頭的欄位如圖所示:

-
協商快取: 回應頭中的 status 是 304,相關欄位有
Etag / If-No-Match,Last-Modified / If-Modified-Since,(1)
ETag 和 If-None-Match:Etag(服務器): 上次加載時,服務器的 response header 回傳的;
If-No-Match(瀏覽器): 瀏覽器請求時的 request header 里的,取的是 Etag 的值,服務器接收到If-None-Match的值后,會拿來跟該資源檔案的 Etag 值做比較,
如果相同,則表示資源檔案沒有發生改變,命中協商快取,服務器優先考慮Etag,
(2)
Last-Modified和If-Modified-Since:Last-Modified(服務器):該資源檔案最后一次更改時間,服務器的 response header 里回傳;
If-Modified-Since(瀏覽器):瀏覽器請求時的 request header 里的,取的是 Last-Modify 的值,
在下一次發送請求時,服務器在接收到會做比對,如果相同,則命中協商快取,Etag 與 Last-Modifed 均是服務器的回應頭回傳的,如圖所示:

Q3: http協議中,常見的狀態碼有哪些?
A3:以2開頭的代表的成功的回傳,以3開頭代表重定向,以4開頭是客戶端、用戶操作的問題,以5開頭是服務器端的錯誤,
| 狀態碼 | 含義 |
|---|---|
| 200 | 請求成功, |
| 301 | 永久重定向,請求的網頁已永久移動到新位置,瀏覽器會自動重定向到新的 url 地址, |
| 302 | 臨時重定向,服務器目前從不同位置的網頁回應請求,可使用原有 url 地址, |
| 303 | 查看其它位置,重定向, |
| 304 | Not Modified,資源未作修改,協商快取, |
| 305 | 所訪問資源必須通過代理訪問, |
| 401 | 要求用戶要進行身份驗證,未登錄等情形, |
| 403 | 請求已發出,但服務端禁止訪問, |
| 404 | 頁面無法找到, |
| 500 | 服務器內部錯誤, |
| 501 | 服務器不支持請求的功能, |
| 502 | 網關錯誤,通常需要后端找原因, |
| 503 | 服務器超載或系統維護, |
Q4:http協議 與 https協議 有什么區別?
A4:http協議是明文傳輸,https協議是http協議+ssl協議構建的,加密傳輸協議,
- http 的連接很簡單,是無狀態的,
- http 傳輸的資料都是未加密的,是明文傳輸,
- https 協議是由
http和ssl協議構建的可進行加密傳輸和身份認證的網路協議,比http協議的安全性更高,可防止資料在傳輸程序中不被竊取、改變,確保資料的完整性, - https 協議需要ca證書,費用較高,ssl 證書也需要錢,功能越強大的證書費用越高,
Q5: TCP和UDP的區別
A5: 區別如下,
- TCP是面向連接的,UDP 是無連接的,即發送資料前不需要先建立鏈接,
- TCP提供可靠的服務,也就是說,通過TCP連接傳送的資料,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付, 并且因為tcp可靠,面向連接,不會丟失資料因此適合大資料量的交換,
- TCP是面向位元組流,UDP面向報文,并且網路出現擁塞不會使得發送速率降低(因此會出現丟包,對實時的應用比如IP電話和視頻會議等),
- TCP只能是1對1的,UDP支持1對1,1對多,
- TCP是面向連接的可靠性傳輸,而UDP是不可靠的,
其他知識點,三次握手、四次揮手能說出來就可以了,詳細程序點擊這里
針對以上還可能會順便問到 網站性能優化 等問題,大家自行再研究,本文主題暫不涉及,(文章持續維護中,如有不足,請指正,)
本文為原創文章,轉載需經本人同意并注明出處,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292723.html
標籤:其他
