HTTP最基礎的內容,面試還不會?

HTTP最基礎的內容,面試還不會?


HTTP 是一種無狀態協議,也就是說服務器並不會維護客戶端的狀態信息。所以就有了Cookie 和Session 的出現了。而Cookie 和Session 就是用來維持狀態的。

我們都知道關於HTTP 一直都是面試裡面經常被問到的內容,也是在開發的時候遇到的一些關於HTTP 的狀態碼的問題,從而來定位解決問題。今天了不起就來說一下這個關於HTTP 的相關知識。

HTTP

什麼是HTTP 呢?

HTTP 稱為超文本傳輸協議(Hypertext Transfer Protocol,HTTP)是一個簡單的請求-響應協議,它通常運行在TCP之上。它指定了客戶端可能發送給服務器什麼樣的消息以及得到什麼樣的響應。

HTTP 的迭代:

  • 0.9

0.9協議是適用於各種數據信息的簡潔快速協議,但是遠不能滿足日益發展的各種應用的需要。0.9協議就是一個交換信息的無序協議,僅僅限於文字。由於無法進行內容的協商,在雙發的握手和協議中,並有規定雙發的內容是什麼,也就是圖片是無法顯示和處理的。

  • 1.0

到了1.0協議階段,也就是在1982年,Tim Berners-Lee提出了HTTP/1.0。在此後的不斷豐富和發展中,HTTP/1.0成為最重要的面向事務的應用層協議。該協議對每一次請求/響應建立並拆除一次連接。其特點是簡單、易於管理,所以它符合了大家的需要,得到了廣泛的應用。

  • 1.1

在1.0協議中,雙方規定了連接方式和連接類型,這已經極大擴展了HTTP的領域,但對於互聯網最重要的速度和效率,並沒有太多的考慮。畢竟,作為協議的製定者,當時也沒有想到HTTP會有那麼快的普及速度。

  • 2.0

HTTP2.0的前身是HTTP1.0和HTTP1.1。雖然之前僅僅只有兩個版本,但這兩個版本所包含的協議規範之龐大,足以讓任何一個有經驗的工程師為之頭疼。網絡協議新版本並不會馬上取代舊版本。實際上,1.0和1.1在之後很長的一段時間內一直並存,這是由於網絡基礎設施更新緩慢所決定的。

HTTP 工作原理

HTTP是基於客戶/服務器模式,且面向連接的。典型的HTTP事務處理有如下的過程:

  • 客戶與服務器建立連接;
  • 客戶向服務器提出請求;
  • 服務器接受請求,並根據請求返回相應的文件作為應答;
  • 客戶與服務器關閉連接。

其實也可以理解為下面的五個步驟

  • 客戶端向服務器發送請求消息,請求消息中包含請求方法、URL、協議版本以及請求頭等信息。
  • 服務器接收到請求消息後,根據請求消息的URL和相應的處理邏輯,生成服務器響應消息,並將其發送給客戶端。
  • 響應消息中包含協議版本、狀態碼、響應頭和響應體等信息。
  • 客戶端接收到響應消息之後,會根據自身的處理方式進行處理,例如如果是網頁,客戶端會解析響應體中的HTML代碼並渲染出網頁。
  • 如果需要繼續與服務器通信,客戶端可以發起新的請求,並重複上述步驟。

而且在HTTP協議中,客戶端和服務器之間不會保持持久連接,每次請求需要重新與服務器建立連接。

又因為HTTP 是一種無狀態協議,也就是說服務器並不會維護客戶端的狀態信息。所以就有了Cookie 和Session 的出現了。而Cookie 和Session 就是用來維持狀態的。

說到狀態,我們就又想到了狀態碼,那麼HTTP 的狀態碼都有哪些呢?

了不起直接就想到了200,404 ,500 這些狀態碼,那麼我們再來看一下HTTP 的狀態碼有多少吧。

HTTP狀態碼

不得不說,還真挺多,不看不知道,一看嚇一跳那種。

1xx(信息性狀態碼)

  • 100 Continue
  • 101 Switching Protocols
  • 102 Processing

2xx(成功狀態碼)

  • 200 OK
  • 201 Created
  • 202 Accepted

204 No Content

  • 207 Multi-Status

3xx(重定向狀態碼)

  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 307 Temporary Redirect

4xx(客戶端錯誤狀態碼)

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowable
  • 408 Request Time-Out

5xx(服務器錯誤狀態碼)

  • 500 Internal Server Error
  • 501 NotImplemented
  • 502 Bad Gateway
  • 503 Service Unavailable

既然都了解了HTTP 那麼必然就引出了HTTPS 為什麼呢?因為你在開發的過程中有沒有遇到過的那種,有些頁面訪問地址是HTTP 也有些頁面是HTTPS 的,那麼HTTP 和HTTPS 有什麼區別和聯繫呢?

HTTPS

HTTPS :是以安全為目標的HTTP通道, 通俗說就是安全版本的HTTP

為啥叫做HTTPS , S的含義, SSL:加密,在HTTP下加入SSL層

那加入SSL 層的意義在哪呢?

因為HTTP的請求信息是明文傳輸, 容易被竊取HTTP不會驗證對方的信息, 存在被冒充的風險數據的完整性沒有校驗, 容易被中間人篡改,所以就會增加了SSL 來保證安全。

SSL操作步驟:

  • 驗證服務器端
  • 允許客戶端和服務端選擇加密算法和密碼, 確保雙方都支持
  • 驗證客戶端
  • 使用公鑰加密技術來生成共享加密數據
  • 創建一個加密的SSL連接
  • 基於該SSL連接傳遞HTTP請求

**HTTP 和HTTPS 的區別

  • https協議需要ca申請證書,一般免費的證書較少,因而是需要一定費用的]
  • http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的SSL加密傳輸協議
  • http 和https使用的是完全不同的連接方式,用的端口也是不一樣的。前者是80端口後者是443端口
  • http的連接很簡單,是無狀態的;https協議是由SSL + HTTP協議構建的可進行加密傳輸,身份認證的網絡協議,比http協議安全.
  • 在OSI模型中,HTTP工作在應用層,而HTTPS工作在傳輸層。

關於HTTP 你了解了麼?