http面試,有這一篇就夠了

面試 HTML 通信 技術 cpp軟件架構獅 2018-12-16

正文

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

基本知識點

  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協議等。

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

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

http面試,有這一篇就夠了

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

http面試,有這一篇就夠了

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

TCP三次握手與四次揮手

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

http面試,有這一篇就夠了

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

HTTP的特點

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

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

HTTP的內容(重點)

報文

HTTP報文分為以下兩種

  • 請求報文
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面試,有這一篇就夠了

HTTP與HTTPS之間的關係

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

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

這裡只是說明一下有這個新技術,具體可以看這篇文章。

常考面試題

由於這篇文章本身就比較長,害怕有些初學者看到會直接關閉,所以我將面試題放在了另外一篇文章,大家請移步這裡。

總結

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

相關推薦

推薦中...