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