HTTP協議常見面試題二【乾貨】

當精力有限時,想一下眼下本身最看重什麼,有選擇性的取捨,將寶貴的時間投入到產出比最大的事情上。面試

根據計劃,第一章節介紹【軟件測試理論】部分,目前已輸出十篇文章:npm

第一篇:軟件測試的目的【雜談】瀏覽器

第二篇:軟件測試七大原則【乾貨】緩存

第三篇:軟件測試新七大原則【乾貨】安全

第四篇:軟件測試的分類【筆記】服務器

第五篇:軟件測試的方法【筆記】cookie

第六篇:軟件測試的工具【筆記】框架

第七篇:如何作好業務測試【雜談】工具

第八篇:如何作好接口測試【雜談】測試

第九篇:HTTP協議常見狀態碼【乾貨】

第十篇:HTTP協議常見面試題一【乾貨】

下面開始個人第十一篇文章,分享【HTTP協議常見面試題二】(接着上一篇繼續)。

6、緩存

  1. 強緩存
  1. 經過設置Expires和Cache-Control實現。強緩存表示在緩存期間不須要發起請求,狀態碼爲200
  2. Expires是HTTP/1的產物,值爲緩存的過時時間
  1. Cache-control出現於HTTP/1.1,優先級比Expires高
  2. Expires指定一個絕對的過時時間(GMT格式),這麼作會致使至少2個
  1. 客戶端和服務器時間不一樣步致使Expires的配置出現問題
  2. 很容易在配置後忘記具體的過時時間,致使過時來臨出現浪涌現象
  1. max-age 指定的是從文檔被訪問後的存活時間,這個時間是個相對值(好比:3600s),相對的是文檔第一次被請求時服務器記錄的Request_time(請求時間)
  2. Expires指定的時間能夠是相對文件的最後訪問時間(Atime)或者修改時間(MTime),而max-age相對對的是文檔的請求時間(Atime)
  1. 在Apache中,max-age是根據Expires的時間來計算出來的max-age = expires- request_time:(mod_expires.c)
  1. 協商緩存
  1. 經過設置Last-Modified和ETag實現。若是緩存過時了,就須要發起請求驗證資源是否有更新。若是發起請求驗證資源沒有改變,返回狀態304,而且更新瀏覽器緩存的有效期。
  2. Last-Modified和If-Modified-Since:Last-Modified表示本地文件最後修改日期,If-Modified-Since會將Last-Modified的值發送給服務器,詢問該日期以後的資源是否有更新,有就將新資源發送來,沒有返回304狀態碼。
  1. ETag和If-None-Match:ETag出現於HTTP/1.1,他的優先級比Last-Modified高。ETag相似於文件的指紋,If-None-Match會將ETag發送給服務器,詢問該ETag是否變更,有變更的話就將獲取新的資源。
  2. Last-Modified 的問題在於它的精度在秒(s)的級別,比較適合不太敏感的靜態資源。
  1. Nginx 官方默認的 ETag 計算方式是爲"文件最後修改時間16進制-文件長度16進制"。
  2. Express 框架使用了 serve-static 中間件來配置緩存方案,使用了一個叫 etag 的 npm 包來實現 etag 計算
  1. 使用文件大小和修改時間
  2. 使用文件內容的hash值和內容長度
  1. F5與Ctrl+F5的區別
  1. F5:跳過強緩存,但會檢查協商緩存
  2. Ctrl+F5:直接從服務器加載,跳過強緩存和協商緩存
  1. Cache-Control
  1. 若是咱們給咱們的cache-control設置了no-cache之後,每次瀏覽器發起設置了cache-control資源請求的時候,都會到服務器端進行資源的驗證,驗證完了之後,若是肯定這個資源能夠使用緩存,纔會讀取本地的緩存。
  2. no-store 徹底不使用緩存

 

7、安全

  1. XSS:攻擊者經過頁面注入可執行的代碼的攻擊方式,防護方法:
  1. 將用戶輸入的內容,進行轉義,過濾標籤和標籤屬性
  2. 使用CSP告訴瀏覽器限制外部資源能夠加載和執行,開啓CSP有兩種方式:
  1. 設置HTTP-Header中的Content-sesurity-Policy
  2. 設置標籤的方式
  1. CSRF:跨站請求僞造,如獲取cookie僞造用戶登錄狀態,防護方法:
  1. 設置cookie的SameSite
  2. 驗證Referer
  1. 登錄後服務器下發一個隨機token,以後的請求帶上

8、三次握手

三次是最小的安全次數,爲了讓客戶端和服務端都能肯定彼此發起和響應的能力是否靠譜

  1. 客戶端發送SYN包
  2. 服務端接收到SYN包以後將SYN+ACK包發送給客戶端
  1. 客戶端接收到SYN+ACK包以後,向服務器發送確認包ACK
  2. 服務端接收到以後鏈接成功,開始傳輸數據

9、四次揮手

關閉鏈接是雙向的,客戶端和服務器均可以提出,四次揮手是爲了避免讓關閉太倉促,保證可靠性

  1. 客戶端發送一個FIN,用來關閉客戶到服務器的數據傳送。
  2. 服務器收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1。
  1. 服務器關閉客戶端的鏈接,發送一個FIN給客戶端。
  2. 客戶端發回ACK報文確認,並將確認序號設置爲收到序號加1。

 

以上原文來自個人公衆號【不僅是測試】,掃描加關注哦O(∩_∩)O~

相關文章
相關標籤/搜索