前端校招面試準備--http知識點大綱及面試易考題總結

前言

前言通常都是廢話,可跳過。。。總結千萬要看,有驚喜喲!!!

 在刷面試題的時候,咱們老是能看到與http相關的內容,沒有學過計算機網絡的人在進行學習的時候可能會以爲知識點比較零散難以記住(好比說我),爲何會難以記住呢,就是由於咱們的知識體系不夠系統,若是咱們知道知識之間的聯繫,就很容易將相關的知識記住了。最近看了一本在http方面比較好的一本入門書籍--《圖解HTTP》,想就裏面的知識進行總結,因此就有了今天的這篇文章。html

正文

 今天這篇文章我準備分兩部分講,一部分是基礎知識點,一部分是總結面試常問到的內容,是基礎知識點是用大綱的形式進行展現,細節上不會闡述不少,重點放在面試題上,下面咱們就開始吧~web

基本知識點

  1. HTTP的誕生
  2. HTTP通訊的過程
  3. HTTP的特色
  4. HTTP的內容
  5. HTTP的持久鏈接和管線化(管道化)
  6. cookie的由來
  7. webscoket,AJAX和HTTP的關係
  8. HTTP和HTTPS的關係

HTTP的誕生

 在計算機剛開始流行的時候,通常都是一人一機,每一個機器並無通訊。WWW(也就是如今的web)爲了讓全世界的研究者知識共享,就提出了三項技術,分別是http,html,url。其中http就是控制客戶端和服務端之間通訊的協議(協議就像是咱們平時交流的語言,只有語言相通,才能夠交流)面試

HTTP通訊的過程

HTTP和TCP/IP協議的關係數據庫

 HTTP協議的通訊過程簡單來講就是請求和響應的過程,客戶端發送請求,服務端接收請求並做出響應。複雜點兒說,就是基於TCP/IP協議進行通訊,這裏須要分清楚TCP/IP協議與TCP協議以及IP協議之間的區別,乍一看,咱們會誤認爲編程

TCP/IP協議 = TCP協議 + IP協議

 這樣理解有些片面,其實TCP/IP是一個協議族,是互聯網相關的各種協議族的總稱,它包含了咱們常見的協議:HTTP協議,TCP協議,IP協議等。segmentfault

ps:這個地方我翻了好幾本書,《圖解HTTP》中說,兩種理解均可以;可是在《圖解TCP/IP》中和謝希仁的《計算機網絡教程》中都只是說TCP/IP協議是一個協議族。緩存

 那麼HTTP協議和TCP協議以及IP協議有什麼關係呢,看下面這張圖就知道了:安全

圖片描述

 這張圖只是很簡單的說明一下TCP/IP的分層結構,咱們只須要知道HTTP,TCP,IP分別位於應用層,傳輸層和網絡層,而且信息在發送和解析的過程是這樣的:(圖片來自《圖解HTTP》)性能優化

圖片描述

 能夠理解成發送的過程就是不斷的添加首部,也就是設置信息(後面會講),而接收解析的過程就像是剝洋蔥同樣將首部一層一層的去掉,最後獲得HTTP數據。服務器

TCP三次握手與四次揮手

 TCCP的三次握手指的是客戶端和服務器的鏈接與斷開的過程,三次握手和四次揮手的簡單版本以下面這張圖所示:(圖片來自《圖解TCP/IP》)

圖片描述

 在整個通訊的過程當中至少須要來回發送7個包才能完成。

HTTP的特色

  • 簡單快速
  • 靈活
  • 無鏈接
  • 無狀態

 前面兩點很好理解,解釋一下後面兩點。無鏈接指的是每次鏈接只處理一個請求,服務器在處理完請求並收到應答後會斷開鏈接;無狀態是指服務器對傳遞的內容沒有記憶

HTTP的內容(重點)

報文

 HTTP報文分爲如下兩種

  • 請求報文

圖片描述

  • 響應報文

圖片描述

 報文的具體劃分又是這樣的(不少詳細內容沒有講,能夠去參考別的資料進行學習):

圖片描述

方法

 通常在請求報文中都會將請求方法放在請求行的第一個,比較常見的方法有如下幾種:

  • GET:獲取資源
  • POST:傳輸實體內容
  • PUT:傳輸文件
  • DELETE:刪除文件
  • HEAD:獲取報文首部

狀態碼
 http狀態碼是在響應報文中出現的,表示這次響應的狀態,大體可劃分爲

  • 1XX:請求接收成功,須要繼續處理
  • 2XX:請求接收成功,而且服務端已經進行處理

    • 200:請求已經成功,會返回響應的數據
  • 3XX:重定向,即URL發生了改變

    • 301:永久重定向,即URL已經發生了改變
    • 302:臨時重定向,即URL只是暫時發生改變
    • 304:請求的網頁沒有發生改變,能夠直接從緩存數據庫中取資源
  • 4XX:請求發生了錯誤

    • 401:請求須要進行驗證
    • 403:頁面訪問被禁止
    • 404:請求的資源不存在
  • 5XX:服務端發生了錯誤

HTTP的持久鏈接和管線化

持久鏈接

 前面咱們在說HTTP特色的時候說過, HTTP是一種無鏈接,無狀態的協議。而TCP是有狀態的長鏈接,爲何HTTP是基於TCP,但HTTP倒是無鏈接?
 由於HTTP每次請求完成後就會關閉TCP協議,可是咱們能夠經過編程本身控制TCP的關閉時間。因爲每次請求都要鏈接TCP協議,效率很低,因此從HTTP/1.1事後,就開啓了一個keep-Alive來保持鏈接,可是這個鏈接也是有時間限制的,不一樣的服務器有不一樣的處理,本身也能夠設置。

管線化

 之前請求和響應模式基本是這樣的:

   請求1 -> 響應1 -> 請求2 -> 響應2 。。。

 有了管線化事後請求和響應模式就變成了這樣:

   請求1 -> 請求2 -> 響應1 -> 響應2 。。。

 也就是說,如今能夠先一次進行不少次請求,而不是像之前那樣,只有上一次的響應成功後才能夠下一次請求,這樣大大的提升了效率。

cookie的由來

 以前咱們說過,HTTP是無狀態的,這樣每次跳轉到新頁面時,都須要從新登陸一次,麻煩又浪費時間。因此就誕生了cookie,cookie是進行狀態管理的,裏面會存放以前登陸的信息。實現原理是客戶端第一次發送請求後,服務端響應時會在響應頭中添加一個set-cookie信息,要求客戶端保存cookie信息,客戶端在下次請求時,會將這個cookie信息自動發送給服務端,服務端接收後就會根據cookie信息進行匹配。

webscoket,AJAX和HTTP的關係

 隨着WEB信息量愈來愈大,HTTP的性能優化也變得愈來愈重要了,其中AJAX就是爲了解決HTTP每次發送請求都會更新整個頁面的問題,有的時候只是改變了一點點,甚至是可有可無的東西時都會發生整個頁面的更新,這樣會形成很大的浪費。因此出現了AJAX,AJAX是一個異步刷新技術,其核心在於XMLHttpRequest,若是不瞭解AJAX的能夠看看我以前的這篇文章

 咱們會發現不管怎麼改,服務器都是處於被動狀態,只能接受客戶端的請求,這樣客戶端只有經過常常發送請求來確認是否有數據更新,可是大多數時候都是沒有數據更新的,這樣會形成很大的浪費,因此就產生了webSocket協議,這個協議就是爲了改變服務器的被動狀態,使用這個協議後,服務端能夠主動給客戶端發送信息,這樣就意味着客戶端只須要一次請求,就能夠保證數據的實時更新,而不是像以前那樣定時發送AJAX請求的來實現定時更新,能夠看看下圖幫助理解(來自菜鳥教程):

圖片描述

HTTP與HTTPS之間的關係

 其實HTTPS不是一個新的協議,只是在HTTP和TCP之間添加了一層SSL協議,上面誕生的新技術是爲了提升HTTP通訊的性能,而HTTPS是爲了提升通訊過程當中的安全性:

HTTP + 加密 + 認證 + 完整性保護 = HTTPS(引自《圖解HTTP》)

這裏只是說明一下有這個新技術,具體能夠看這篇文章

常考面試題

 因爲這篇文章自己就比較長,懼怕有些初學者看到會直接關閉,因此我將面試題放在了另一篇文章,你們請移步這裏

總結

 這篇文章還有好多知識點沒有總結,只是列了一個很粗糙的大綱,把常常容易問到的內容詳細說了一下,仍是推薦你們看書來學習,若是你是對HTTP一無所知,推薦你看《圖解HTTP》,這本書比較適合初學者;若是是對HTTP有必定的瞭解,想系統的進行學習的話,推薦你看《HTTP權威指南》,這本書講得很是細,並且書裏面結構的分佈特別好,強烈推薦!

相關文章
相關標籤/搜索