面试题(http协议篇)
http協議流程?
- http客戶端發起請求,創建到服務器的端口,默認為8080
- http服務器在端口端監聽客戶端請求
- 收到請求后服務器向客戶端返回狀態(如:200等)和內容(如:錯誤信息等)
輸入網址回車或者F5刷新時,計算機與瀏覽器的交互過程?
- 域名解析:
chrome瀏覽器搜索自身的DNS緩存,查看自身的DNS緩存是否存在,若有緩存,則查看是否過期,若未過期則結束;
若瀏覽器未找到緩存或緩存失效,Chrome會搜索操作系統自身的DNS緩存,若找到并未過期則停止搜索
若操作系統自身的DNS緩存也未找到,便讀取本地的HOST文件
若HOST文件也未找到,瀏覽器發起一個DNS的一個系統調用,向本地的主控DNS服務器,一般由寬帶運營商提供發起的一個域名請求,寬帶運營商服務器查看自身緩存,若找到則結束;若未找到,運營商服務器會發起一個迭代DNS解析的請求。(層級調用:運營商請求根域,根域返回COM,運營商請求COM(萬維網提供),查找到返回給運營商)
運營商服務器把IP地址結果返回操作系統內核,同時緩存起來;
操作系統內核把結果返回給瀏覽器,最終瀏覽器拿到對應的IP地址。
瀏覽器----以一個隨機端口向web服務器發起一個TCP連接請求----web服務器
tcp連接請求通過層層路由設備到達服務器端口進入網卡,然后進入到內核的TCP/IP協議棧,還有可能經過防火墻的過濾,最終到達WEB服務器建立連接。
三次握手
客戶端----發起請求------》遠端服務器
客戶端《-----接收請求-------遠端服務器
客戶端-----響應請求-----》遠端服務器
調整器中network的timing(資源加載過程中每個流程所耗費的時間)?
stalled:阻塞,瀏覽器發出請求到請求可以發出的時間,不包含DNS查詢和建立TCP連接的時間
proxy negotiation: 代理協商的時間
request send: 請求的每一個字節前到最后一個字節發出后的時間,可理解為請求時間或上傳時間
waiting: 請求發出后到響應的經一個請求字節的時間 ,包括整個數據在各個路由中貫穿所使用的時間,以及服務器響應這個請求所做的后臺處理時間
content download: 收到響應的第一個字節開始到最后一個字節所花費的時間,即下載時間。
HTTP協議狀態碼
206 Partial Content:客戶發送一個帶有Range頭的GET請求,服務器完成了它 播放視頻和音頻
302 Found:所請求的頁面已經臨時轉移到新的URL
304 Not Modified:客戶端有緩沖的文檔并發出一個條件性的請求,服務器告訴客戶,原來緩沖的文檔還可以繼續使用
401 Unauthorized:請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden:對被請求頁面的訪問被禁止
404 Not Found:請求資源不存在
503 Server Unavailable:請求未完成,服務器臨時過載或當機,一段事件后恢復正常
客戶端在請求一個文件的時候,發現自己緩存的文件有 Last Modified ,那么在請求中會包含 If Modified Since ,這個時間就是緩存文件的 Last Modified 。因此,如果請求中包含 If Modified Since,就說明已經有緩存在客戶端。
服務端只要判斷這個時間和當前請求的文件的修改時間就可以確定是返回 304 還是 200 。對于靜態文件,例如:CSS、圖片,服務器會自動完成 Last Modified 和 If Modified Since 的比較,完成緩存或者更新。但是對于動態頁面,就是動態產生的頁面,往往沒有包含 Last Modified 信息,這樣瀏覽器、網關等都不會做緩存,也就是在每次請求的時候都完成一個 200 的請求。因此,對于動態頁面做緩存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定義,其次根據 Request 中的 If Modified Since 和被請求內容的更新時間來返回 200 或者 304 。雖然在返回 304 的時候已經做了一次數據庫查詢,但是可以避免接下來更多的數據庫查詢,并且沒有返回頁面內容而只是一個 HTTP Header,從而大大的降低帶寬的消耗,對于用戶的感覺也是提高。當這些緩存有效的時候,通過 Fiddler 或HttpWatch 查看一個請求會得到這樣的結果:
第一次訪問 200
按F5刷新(第二次訪問) 304
按Ctrl+F5強制刷新 200
cookie、localstorage、session的區別
本地存儲主要有:cookie、localStorage和sessionStorage。利用本地存儲,把一部分數據保存在客戶端,減少對服務器的請求,降低服務器壓力,提升網頁加載速度。
Cookie:主要由服務器生成,且前端也可以設置,保存在客戶端本地的一個文件,通過response響應頭的set-Cookie字段進行設置,且Cookie的內容自動在請求的時候被傳遞給服務器。在客戶端和服務器之間來回傳遞,耗性能。
Cookie可以記錄用戶ID、密碼、瀏覽過的網頁、停留的時間等信息。當你再次來到該網站時,網站通過讀取Cookies,得知你的相關信息,就可以做出相應的動作,如不用輸入ID、密碼就直接登錄等等。一個網站只能讀取它自己
放置的信息,不能讀取其他網站的Cookie文件。因此,Cookie文件還保存了host屬性,即網站的域名或ip。 這些屬性以名值對的方式進行保存,內容大多進行了加密處理。Cookie文件的命名格式是:用戶名@網站地址[數字].txt
優點:
(1)給用戶更人性化的使用體驗,如記住“密碼功能”、老用戶登錄歡迎語;
(2)彌補了HTTP無連接特性;
(3)站點統計訪問人數的一個依據
缺點:
(1)它無法解決多人共用一臺電腦的問題,帶來了不安全因素;
(2)Cookie文件容易被誤刪除;
(3)一人使用多臺電腦;
(4)Cookies欺騙。修改host文件,可以非法訪問目標站點的Cookie;
(5)容量有限制,不能超過4kb;
(6)在請求頭上帶著數據安全性差。
localStorage:主要是前端開發人員在前端設置,一旦數據保存在本地后,就可以避免再向服務器請求數據,因此減少不必要的數據請求,減少數據在瀏覽器和服務器間不必要地來回傳遞。
可以長期存儲數據,沒有時間限制,一天,一年,兩年甚至更長,數據都可以使用。localStorage中一般瀏覽器支持的是5M大小,這個在不同的瀏覽器中會有所不同。
優點:
(1)alStorage拓展了cookie的4k限制;
(2)alStorage可以將第一次請求的5M大小數據直接存儲到本地,相比于cookie可以節約帶寬;
(3)alStorage的使用也是遵循同源策略的,所以不同的網站直接是不能共用相同的localStorage。
缺點:
(1)需要手動刪除,否則長期存在;
(2)大小不一,版本的支持也不一樣;
(3)alStorage只支持string類型的存儲,JSON對象需要轉換;
(4)alStorage本質上是對字符串的讀取,如果存儲內容多的話會消耗內存空間,會導致頁面變卡。
sessionStorage:主要是前端開發人員在前端設置,sessionStorage(會話存儲),只有在瀏覽器被關閉之前使用,創建另一個頁面時同時可以使用,關閉瀏覽器之后數據就會消失。存儲上限制:不同的瀏覽器存儲的上限也不一樣,但大多數瀏覽器把上限限制在5MB以下。
總結
以上是生活随笔為你收集整理的面试题(http协议篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kali linux 局域网arp断网攻
- 下一篇: 自动删除旧代码神器来了!Uber开源Pi