前端基礎知識點四部曲(四)

服務器端面試篇

1、狀態(tài)碼

2XX(成功處理了請求狀態(tài))
          200 服務器已經(jīng)成功處理請求,并提供了請求的網(wǎng)頁
          201 用戶新建或修改數(shù)據(jù)成功
          202 一個請求已經(jīng)進入后臺
          204 用戶刪除成功
3XX(每次請求使用的重定向不要超過5次)
          304 網(wǎng)頁上次請求沒有更新,節(jié)省帶寬和開銷
4XX(表示請求可能出錯,妨礙了服務器的處理)
          400 服務器不理解請求的語法
          401 用戶沒有權限(用戶名,密碼輸入錯誤)
          403 用戶得到授權(401相反),但是訪問被禁止
          404 服務器找不到請求的網(wǎng)頁,
5XX(表示服務器在處理請求的時候發(fā)生內部錯誤)
          500 服務器遇到錯誤,無法完成請求
          503 服務器目前無法使用(超載或停機維護)

2、304的緩存原理(添加Etag標簽.last-modified)

  • 1.服務器首先產(chǎn)生Etag,服務器可在稍后使用它來判斷頁面是否被修改。本質上,客戶端通過該記號傳回服務器要求服務器驗證(客戶端)緩存)
  • 2.304是HTTP的狀態(tài)碼,服務器用來標識這個文件沒有被修改,不返回內容,瀏覽器接受到這個狀態(tài)碼會去去找瀏覽器緩存的文件
  • 3.流程:客戶端請求一個頁面A。服務器返回頁面A,并在A上加一個Tage客服端渲染該頁面,并把Tage也存儲在緩存中??蛻舳嗽俅握埱箜撁鍭并將上次請求的資源和ETage一起傳遞給服務器。服務器檢查Tage.并且判斷出該頁面自上次客戶端請求之后未被修改。直接返回304

last-modified: 客服端請求資源,同時有一個last-modified的屬性標記此文件在服務器最后修改的時間,客服端第二次請求此url時,根據(jù)http協(xié)議。瀏覽器會向服務器發(fā)送一個If-Modified-Since報頭,詢問該事件之后文件是否被修改,沒修改返回304

 有了Last-Modified,為什么還要用ETag?
  1、因為如果在一秒鐘之內對一個文件進行兩次更改,Last-Modified就會不正確(Last—Modified不能識別秒單位的修改)
  2、某些服務器不能精確的得到文件的最后修改時間
  3、一些文件也行會周期新的更改,但是他的內容并不改變(僅僅改變修改的事件),這個時候我們并不希望客戶端認為文件被修改,而重新Get

ETag,為什么還要用Last-Modified?
  1、兩者互補,ETag的判斷的缺陷,比如一些圖片等靜態(tài)文件的修改
  2、如果每次掃描內容都生成ETag比較,顯然要比直接比較修改時間慢的多。


ETag是被請求變量的實體值(文件的索引節(jié),大小和最后修改的時間的Hash值)
  1、ETag的值服務器端對文件的索引節(jié),大小和最后的修改的事件進行Hash后得到的。

3、get/post的區(qū)別

  • 1.get數(shù)據(jù)是存放在url之后,以?分割url和傳輸數(shù)據(jù),參數(shù)之間以&相連; post方法是把提交的數(shù)據(jù)放在http包的Body中
  • 2.get提交的數(shù)據(jù)大小有限制,(因為瀏覽器對url的長度有限制),post的方法提交的數(shù)據(jù)沒有限制
  • 3.get需要request.queryString來獲取變量的值,而post方式通過request.from來獲取變量的值
  • 4.get的方法提交數(shù)據(jù),會帶來安全問題,比如登錄一個頁面,通過get的方式提交數(shù)據(jù),用戶名和密碼就會出現(xiàn)在url上

4、http和https的總結

4.1、http協(xié)議的理解

1.超文本的傳輸協(xié)議,是用于從萬維網(wǎng)服務器超文本傳輸?shù)奖镜刭Y源的傳輸協(xié)議
2.基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML,圖片資源)
3.基于運用層的面向對象的協(xié)議,由于其簡潔、快速的方法、適用于分布式超媒體信息系統(tǒng)
4.http請求信息request:
    請求行(request line)、請求頭部(header),空行和請求數(shù)據(jù)四部分構成

    請求行,用來說明請求類型,要訪問的資源以及所使用的HTTP版本.
    請求頭部,用來說明服務器要使用的附加信息
    空行,請求頭部后面的空行是必須的
    請求數(shù)據(jù)也叫主體,可以添加任意的其他數(shù)據(jù)。
5.http相應信息Response
    狀態(tài)行、消息報頭、空行和響應正文

    狀態(tài)行,由HTTP協(xié)議版本號, 狀態(tài)碼, 狀態(tài)消息 三部分組成
    消息報頭,用來說明客戶端要使用的一些附加信息
    空行,消息報頭后面的空行是必須的
    響應正文,服務器返回給客戶端的文本信息。

4.2、http和https的區(qū)別

http https
是以安全為目標的HTTP通道,簡單講是HTTP的安全版本,通過SSL加密 超文本傳輸協(xié)議。是一個客服端和服務器端請求和應答的標準(tcp),使瀏覽器更加高效,使網(wǎng)絡傳輸減少

4.3、http1.0、1.1、2.0的區(qū)別

1.0跟1.1的區(qū)別:

長連接:HTTP1.0需要使用keep-alive參數(shù)來告知服務器建立一個長連接,而HTP1.1默認支持長連接

節(jié)約寬帶:HTTP1.1支持只發(fā)送一個header信息(不帶任何body信息)

host域(設置虛擬站點,也就是說,webserver上的多個虛擬站點可以共享同一個ip端口):HTTP1.0沒有host域

1.1跟2.0的區(qū)別:

  • 1.http2采用的二進制文本傳輸數(shù)據(jù),而非http1文本格式,二進制在協(xié)議的解析和擴展更好
  • 2.數(shù)據(jù)壓縮:對信息頭采用了HPACK進行壓縮傳輸,節(jié)省了信息頭帶來的網(wǎng)絡流量
  • 3.多路復用:一個連接可以并發(fā)處理多個請求
  • 4.服務器推送:我們對支持HTTP2.0的webserver請求數(shù)據(jù)的時候,服務器會順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創(chuàng)建連接發(fā)送請求到服務器端獲取。這種方式非常合適加載靜態(tài)資源

5、web總結

5.1、web緩存

1.web緩存就是存在于客戶端與服務器之間的一個副本、當你第一個發(fā)出請求后,緩存根據(jù)請求保存輸出內容的副本
2.緩存的好處
        (1)減少不必要的請求
    (2)降低服務器的壓力,減少服務器的消耗
    (3)降低網(wǎng)絡延遲,加快頁面打開速度(直接讀取瀏覽器的數(shù))

5.2、常見的web安全及防護原理

  • 1.sql注入原理:通郭sql命令插入到web表單遞交或者輸入活命,達到欺騙服務器執(zhí)行的惡意sql命令
    防范:1.對用戶輸入進行校驗
    2.不適用動態(tài)拼接sql
  • 2.XSS(跨站腳本攻擊):往web頁面插入惡意的html標簽或者js代碼。
    舉例子:在論壇放置一個看是安全的鏈接,竊取cookie中的用戶信息
    防范:1.盡量采用post而不使用get提交表單
    2.避免cookie中泄漏用戶的隱式
  • 3.CSRF(跨站請求偽裝):通過偽裝來自受信任用戶的請求
    舉例子:黃軼老師的webapp音樂請求數(shù)據(jù)就是利用CSRF跨站請求偽裝來獲取QQ音樂的數(shù)據(jù)
    防范:在客服端頁面增加偽隨機數(shù),通過驗證碼
  • XSS和CSRF的區(qū)別:
    1.XSS是獲取信息,不需要提前知道其他用戶頁面的代碼和數(shù)據(jù)包
    2.CSRF代替用戶完成指定的動作,需要知道其他頁面的代碼和數(shù)據(jù)包

5.3、CDN(內容分發(fā)網(wǎng)絡)

1.盡可能的避開互聯(lián)網(wǎng)有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié)。使內容傳輸?shù)母旄€(wěn)定。
2.關鍵技術:內容存儲和分發(fā)技術中
3.基本原理:廣泛采用各種緩存服務器,將這些緩存服務器分布到用戶訪問相對的地區(qū)或者網(wǎng)絡中。當用戶訪問網(wǎng)絡時利用全局負載技術
        將用戶的訪問指向距離最近的緩存服務器,由緩存服務器直接相應用戶的請求(全局負載技術)

6、前端呈現(xiàn)流程(TCP三次握手,DOM樹渲染)

6.1、從輸入url到獲取頁面的完整過程

1.查詢NDS(域名解析),獲取域名對應的IP地址  查詢?yōu)g覽器緩存
2.瀏覽器與服務器建立tcp鏈接(三次握手)
3.瀏覽器向服務器發(fā)送http請求(請求和傳輸數(shù)據(jù))
4.服務器接受到這個請求后,根據(jù)路經(jīng)參數(shù),經(jīng)過后端的一些處理生成html代碼返回給瀏覽器
5.瀏覽器拿到完整的html頁面代碼開始解析和渲染,如果遇到外部的css或者js,圖片一樣的步驟
6.瀏覽器根據(jù)拿到的資源對頁面進行渲染,把一個完整的頁面呈現(xiàn)出來

6.2、TCP三次握手

客服端發(fā)c起請求連接服務器端s確認,服務器端也發(fā)起連接確認客服端確認。

  • 第一次握手:客服端發(fā)送一個請求連接,服務器端只能確認自己可以接受客服端發(fā)送的報文段
  • 第二次握手: 服務端向客服端發(fā)送一個鏈接,確認客服端收到自己發(fā)送的報文段
  • 第三次握手: 服務器端確認客服端收到了自己發(fā)送的報文段

6.3、瀏覽器渲染原理及流程 DOM -> CSSOM -> render -> layout -> print

流程:解析html以及構建dom樹 -> 構建render樹 ->  布局render樹 -> 繪制render樹
    概念:1.構建DOM樹: 渲染引擎解析HTML文檔,首先將標簽轉換成DOM樹中的DOM node(包括js生成的標簽)生成內容樹
          2.構建渲染樹: 解析對應的css樣式文件信息(包括js生成的樣式和外部的css)
          3.布局渲染樹:從根節(jié)點遞歸調用,計算每一個元素的大小,位置等。給出每個節(jié)點所在的屏幕的精準位置
          4.繪制渲染樹:遍歷渲染樹,使用UI后端層來繪制每一個節(jié)點
   
    重繪:當盒子的位置、大小以及其他屬性,例如顏色、字體大小等到確定下來之后,瀏覽器便把這些顏色都按照各自的特性繪制一遍,將內容呈現(xiàn)在頁面上
        觸發(fā)重繪的條件:改變元素外觀屬性。如:color,background-color等
        重繪是指一個元素外觀的改變所觸發(fā)的瀏覽器行為,瀏覽器會根據(jù)元素的新屬性重新繪制,使元素呈現(xiàn)新的外觀
    注意:table及其內部元素需要多次計算才能確定好其在渲染樹中節(jié)點的屬性值,比同等元素要多發(fā)時間,要盡量避免使用table布局
    
    重排(重構/回流/reflow): 當渲染書中的一部分(或全部)因為元素的規(guī)模尺寸,布局,隱藏等改變而需要重新構建,這就是回流。
        每個頁面都需要一次回流,就是頁面第一次渲染的時候
    重排一定會影響重繪,但是重繪不一定會影響重排

7、前端儲存總結

7.1、存儲方式與傳輸方式

  • 1.indexBD: 是h5的本地存儲庫,把一些數(shù)據(jù)存儲到瀏覽器中,沒網(wǎng)絡,瀏覽器可以從這里讀取數(shù)據(jù),離線運用。5m

  • 2.Cookie: 通過瀏覽器記錄信息確認用戶身份,最大4kb,這也就限制了傳輸?shù)臄?shù)據(jù),請求的性能會受到影響

  • 3.Session: 服務器端使用的一種記錄客戶狀態(tài)的機制(session_id存在set_cookie發(fā)送到客服端,保存為cookie)

  • 4.localStroage: h5的本地存儲,數(shù)據(jù)永久保存在客服端

      1、cookie,sessionStorage,localStorage是存放在客戶端,session對象數(shù)據(jù)是存放在服務器上
         實際上瀏覽器和服務器之間僅需傳遞session id即可,服務器根據(jù)session-id找到對應的用戶session對象
          session存儲數(shù)據(jù)更安全一些,一般存放用戶信息,瀏覽器只適合存儲一般的數(shù)據(jù)
      2、cookie數(shù)據(jù)始終在同源的http請求中攜帶,在瀏覽器和服務器來回傳遞,里面存放著session-id
         sessionStorage,localStorage僅在本地保存
      3、大小限制區(qū)別,cookie數(shù)據(jù)不超過4kb,localStorage在谷歌瀏覽中2.6MB
      4、數(shù)據(jù)有效期不同,cookie在設置的(服務器設置)有效期內有效,不管窗口和瀏覽器關閉
        sessionStorage僅在當前瀏覽器窗口關閉前有效,關閉即銷毀(臨時存儲)
        localStorage始終有效    
    

7.2、SessionStorage和localStorage區(qū)別:

1.sessionStorage用于本地存儲一個會話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在用一個會話的頁面中才能被訪問(也就是說在第一次通信過程中)
   并且在會話結束后數(shù)據(jù)也隨之銷毀,不是一個持久的本地存儲,會話級別的儲存
2.localStorage用于持久化的本地存儲,除非主動刪除數(shù)據(jù),否則不會過期

7.3、token、cookie、session三者的理解

  • 1、token就是令牌,比如你授權(登錄)一個程序時,他就是個依據(jù),判斷你是否已經(jīng)授權該軟件(最好的身份認證,安全性好,且是唯一的)用戶身份的驗證方式
  • 2、cookie是寫在客戶端一個txt文件,里面包括登錄信息之類的,這樣你下次在登錄某個網(wǎng)站,就會自動調用cookie自動登錄用戶名服務器生成,發(fā)送到瀏覽器、瀏覽器保存,下次請求再次發(fā)送給服務器(存放著登錄信息)
  • 3、session是一類用來客戶端和服務器之間保存狀態(tài)的解決方案,會話完成被銷毀(代表的就是服務器和客戶端的一次會話過程)cookie中存放著sessionID,請求會發(fā)送這個id。sesion因為request對象而產(chǎn)生。

7.3、基于Token的身份驗證:(最簡單的token: uid用戶唯一的身份識別 + time當前事件戳 + sign簽名)

  1、用戶通過用戶名和密碼發(fā)送請求
  2、服務器端驗證
  3、服務器端返回一個帶簽名的token,給客戶端
  4、客戶端儲存token,并且每次用于發(fā)送請求
  5、服務器驗證token并且返回數(shù)據(jù)
  每一次請求都需要token
 cookie與session區(qū)別
  1、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務器上。
  2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙考慮到安全應當使用session。
  3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE。
  4、單個cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

7.4、session與token區(qū)別

  • 1、session認證只是把簡單的User的信息存儲Session里面,sessionID不可預測,一種認證手段。只存在服務端,不能共享到其他的網(wǎng)站和第三方App
  • 2、token是oAuth Token,提供的是認證和授權,認證針對用戶,授權是針對App,目的就是讓某APP有權訪問某用戶的的信息。Token是唯一的,token不能轉移到其他的App,也不能轉到其他用戶上。(適用app)
  • 3、session的狀態(tài)是存在服務器端的,客戶端只存在session id, Token狀態(tài)是存儲在客戶端的

7.5、Cookie的弊端有哪些???(優(yōu)勢:保存客戶端數(shù)據(jù),分擔了服務器存儲的負擔)

  1、數(shù)量和長度的限制。每個特定的域名下最多生成20個cookie(chorme和safari沒有限制)
  2、安全性問題。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容