HTTP最基礎的內(nèi)容,面試還不會?
我們都知道關(guān)于 HTTP 一直都是面試里面經(jīng)常被問到的內(nèi)容,也是在開發(fā)的時候遇到的一些關(guān)于 HTTP 的狀態(tài)碼的問題,從而來定位解決問題。今天了不起就來說一下這個關(guān)于 HTTP 的相關(guān)知識。
HTTP
什么是 HTTP 呢?
HTTP 稱為 超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP)是一個簡單的請求-響應協(xié)議,它通常運行在TCP之上。它指定了客戶端可能發(fā)送給服務器什么樣的消息以及得到什么樣的響應。
HTTP 的迭代:
- 0.9
0.9協(xié)議是適用于各種數(shù)據(jù)信息的簡潔快速協(xié)議,但是遠不能滿足日益發(fā)展的各種應用的需要。0.9協(xié)議就是一個交換信息的無序協(xié)議,僅僅限于文字。由于無法進行內(nèi)容的協(xié)商,在雙發(fā)的握手和協(xié)議中,并有規(guī)定雙發(fā)的內(nèi)容是什么,也就是圖片是無法顯示和處理的。
- 1.0
到了1.0協(xié)議階段,也就是在1982年,Tim Berners-Lee提出了HTTP/1.0。在此后的不斷豐富和發(fā)展中,HTTP/1.0成為最重要的面向事務的應用層協(xié)議。該協(xié)議對每一次請求/響應建立并拆除一次連接。其特點是簡單、易于管理,所以它符合了大家的需要,得到了廣泛的應用。
- 1.1
在1.0協(xié)議中,雙方規(guī)定了連接方式和連接類型,這已經(jīng)極大擴展了HTTP的領(lǐng)域,但對于互聯(lián)網(wǎng)最重要的速度和效率,并沒有太多的考慮。畢竟,作為協(xié)議的制定者,當時也沒有想到HTTP會有那么快的普及速度。
- 2.0
HTTP2.0的前身是HTTP1.0和HTTP1.1。雖然之前僅僅只有兩個版本,但這兩個版本所包含的協(xié)議規(guī)范之龐大,足以讓任何一個有經(jīng)驗的工程師為之頭疼。網(wǎng)絡協(xié)議新版本并不會馬上取代舊版本。實際上,1.0和1.1在之后很長的一段時間內(nèi)一直并存,這是由于網(wǎng)絡基礎設施更新緩慢所決定的。
HTTP 工作原理
HTTP是基于客戶/服務器模式,且面向連接的。典型的HTTP事務處理有如下的過程:
- 客戶與服務器建立連接;
- 客戶向服務器提出請求;
- 服務器接受請求,并根據(jù)請求返回相應的文件作為應答;
- 客戶與服務器關(guān)閉連接。
其實也可以理解為下面的五個步驟
- 客戶端向服務器發(fā)送請求消息,請求消息中包含請求方法、URL、協(xié)議版本以及請求頭等信息。
- 服務器接收到請求消息后,根據(jù)請求消息的URL和相應的處理邏輯,生成服務器響應消息,并將其發(fā)送給客戶端。
- 響應消息中包含協(xié)議版本、狀態(tài)碼、響應頭和響應體等信息。
- 客戶端接收到響應消息之后,會根據(jù)自身的處理方式進行處理,例如如果是網(wǎng)頁,客戶端會解析響應體中的HTML代碼并渲染出網(wǎng)頁。
- 如果需要繼續(xù)與服務器通信,客戶端可以發(fā)起新的請求,并重復上述步驟。
而且 在HTTP協(xié)議中,客戶端和服務器之間不會保持持久連接,每次請求需要重新與服務器建立連接。
又因為 HTTP 是一種無狀態(tài)協(xié)議,也就是說服務器并不會維護客戶端的狀態(tài)信息。所以就有了 Cookie 和 Session 的出現(xiàn)了。而 Cookie 和 Session 就是用來維持狀態(tài)的。
說到狀態(tài),我們就又想到了狀態(tài)碼,那么 HTTP 的狀態(tài)碼都有哪些呢?
了不起直接就想到了 200,404 ,500 這些狀態(tài)碼,那么我們再來看一下 HTTP 的狀態(tài)碼有多少吧。
HTTP狀態(tài)碼
不得不說,還真挺多,不看不知道,一看嚇一跳那種。
1xx(信息性狀態(tài)碼)
- 100 Continue
- 101 Switching Protocols
- 102 Processing
2xx(成功狀態(tài)碼)
- 200 OK
- 201 Created
- 202 Accepted
204 No Content
- 207 Multi-Status
3xx(重定向狀態(tài)碼)
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect
4xx(客戶端錯誤狀態(tài)碼)
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 405 Method Not Allowable
- 408 Request Time-Out
5xx(服務器錯誤狀態(tài)碼)
- 500 Internal Server Error
- 501 NotImplemented
- 502 Bad Gateway
- 503 Service Unavailable
既然都了解了 HTTP 那么必然就引出了 HTTPS 為什么呢?因為你在開發(fā)的過程中有沒有遇到過的那種,有些頁面訪問地址是 HTTP 也有些頁面是 HTTPS 的,那么 HTTP 和 HTTPS 有什么區(qū)別和聯(lián)系呢?
HTTPS
HTTPS :是以安全為目標的HTTP通道, 通俗說就是安全版本的HTTP
為啥叫做HTTPS , S的含義, SSL:加密,在HTTP下加入SSL層
那加入 SSL 層的意義在哪呢?
因為HTTP的請求信息是明文傳輸, 容易被竊取 HTTP不會驗證對方的信息, 存在被冒充的風險 數(shù)據(jù)的完整性沒有校驗, 容易被中間人篡改,所以就會增加了 SSL 來保證安全。
SSL操作步驟:
- 驗證服務器端
- 允許客戶端和服務端選擇加密算法和密碼, 確保雙方都支持
- 驗證客戶端
- 使用公鑰加密技術(shù)來生成共享加密數(shù)據(jù)
- 創(chuàng)建一個加密的SSL連接
- 基于該SSL連接傳遞HTTP請求
**HTTP 和 HTTPS 的區(qū)別
- https協(xié)議需要 ca申請證書,一般免費的證書較少,因而是需要一定費用的]
- http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的SSL加密傳輸協(xié)議
- http 和 https使用的是完全不同的連接方式,用的端口也是不一樣的。前者是80端口 后者是443端口
- http的連接很簡單,是無狀態(tài)的;https協(xié)議是由 SSL + HTTP協(xié)議構(gòu)建的可進行加密傳輸,身份認證的網(wǎng)絡協(xié)議,比http協(xié)議安全.
- 在OSI模型中,HTTP工作在應用層,而HTTPS工作在傳輸層。
關(guān)于 HTTP 你了解了么?