HTTP協(xié)議簡(jiǎn)介:
HTTP是超文本傳輸協(xié)議瞻颂,是一種無(wú)狀態(tài)的協(xié)議,是常見(jiàn)的一種應(yīng)用層協(xié)議郑象。HTTP是一個(gè)通信規(guī)則贡这,規(guī)定了客戶端發(fā)送給服務(wù)器的內(nèi)容格式,也規(guī)定了服務(wù)器發(fā)送給客戶端的內(nèi)容格式厂榛。
HTTP請(qǐng)求信息:HTTP請(qǐng)求頭中可以看到當(dāng)前請(qǐng)求支持的語(yǔ)言盖矫,壓縮格式丽惭,編碼格式以及何種類(lèi)型的返回文件,Connection以及Cookie辈双,Content-Type等信息责掏。
HTTP返回信息:HTTP返回信息中包括響應(yīng)協(xié)議,HTTP Code以及Content-Type湃望,時(shí)間和Cookie等信息拷橘。
瀏覽網(wǎng)頁(yè)是HTTP的主要應(yīng)用,但是這并不代表HTTP就只能應(yīng)用于網(wǎng)頁(yè)的瀏覽喜爷。HTTP是一種協(xié)議,只要通信的雙方都遵守這個(gè)協(xié)議萄唇,HTTP就能有用武之地檩帐。比如咱們常用的QQ,迅雷這些軟件另萤,都會(huì)使用HTTP協(xié)議(還包括其他的協(xié)議)湃密。
HTTP的特點(diǎn)
1、簡(jiǎn)單快速:客戶向服務(wù)器請(qǐng)求服務(wù)時(shí)四敞,只需傳送請(qǐng)求方法和路徑泛源。由于HTTP協(xié)議簡(jiǎn)單,使得HTTP服務(wù)器的程序規(guī)模小忿危,因而通信速度很快达箍。
2、靈活:HTTP允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象铺厨。正在傳輸?shù)念?lèi)型由Content-Type加以標(biāo)記缎玫。
3、HTTP 0.9和1.0使用非持續(xù)連接:限制每次連接只處理一個(gè)請(qǐng)求解滓,服務(wù)器處理完客戶的請(qǐng)求赃磨,并收到客戶的應(yīng)答后,即斷開(kāi)連接洼裤。HTTP 1.1使用持續(xù)連接:不必為每個(gè)web對(duì)象創(chuàng)建一個(gè)新的連接邻辉,一個(gè)連接可以傳送多個(gè)對(duì)象,采用這種方式可以節(jié)省傳輸時(shí)間腮鞍。
4值骇、無(wú)狀態(tài):HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力移国。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息雷客,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大桥狡。另一方面搅裙,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快皱卓。
5、支持B/S及C/S模式部逮。
HTTP工作流程
一次HTTP操作稱為一個(gè)事務(wù)娜汁,其工作過(guò)程可分為四步:
1.首先客戶機(jī)與服務(wù)器需要建立連接。只要單擊某個(gè)超級(jí)鏈接兄朋,HTTP的工作開(kāi)始掐禁。
2.建立連接后,客戶機(jī)發(fā)送一個(gè)請(qǐng)求給服務(wù)器颅和,請(qǐng)求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL)傅事、協(xié)議版本號(hào),后邊是MIME信息包括請(qǐng)求修飾符峡扩、客戶機(jī)信息和可能的內(nèi)容蹭越。
3.服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息教届,其格式為一個(gè)狀態(tài)行响鹃,包括信息的協(xié)議版本號(hào)、一個(gè)成功或錯(cuò)誤的代碼案训,后邊是MIME信息包括服務(wù)器信息买置、實(shí)體信息和可能的內(nèi)容。
4.客戶端接收服務(wù)器所返回的信息通過(guò)瀏覽器顯示在用戶的顯示屏上强霎,然后客戶機(jī)與服務(wù)器斷開(kāi)連接忿项。
如果在以上過(guò)程中的某一步出現(xiàn)錯(cuò)誤,那么產(chǎn)生錯(cuò)誤的信息將返回到客戶端城舞,有顯示屏輸出倦卖。對(duì)于用戶來(lái)說(shuō),這些過(guò)程是由HTTP自己完成的椿争,用戶只要用鼠標(biāo)點(diǎn)擊怕膛,等待信息顯示就可以了。
HTTP之請(qǐng)求消息Request
客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器的請(qǐng)求消息包括以下格式:
?請(qǐng)求行秦踪、請(qǐng)求頭部褐捻、空行和請(qǐng)求數(shù)據(jù)四個(gè)部分組成。
(1)Get請(qǐng)求例子
第一部分:請(qǐng)求行椅邓,用來(lái)說(shuō)明請(qǐng)求類(lèi)型,要訪問(wèn)的資源以及所使用的HTTP版本.
GET說(shuō)明請(qǐng)求類(lèi)型為GET,[/562f25980001b1b106000338.jpg]為要訪問(wèn)的資源柠逞,該行的最后一部分說(shuō)明使用的是HTTP1.1版本。
第二部分:請(qǐng)求頭部景馁,緊接著請(qǐng)求行(即第一行)之后的部分板壮,用來(lái)說(shuō)明服務(wù)器要使用的附加信息
從第二行起為請(qǐng)求頭部,HOST將指出請(qǐng)求的目的地.User-Agent,服務(wù)器端和客戶端腳本都能訪問(wèn)它,它是瀏覽器類(lèi)型檢測(cè)邏輯的重要基礎(chǔ).該信息由你的瀏覽器來(lái)定義,并且在每個(gè)請(qǐng)求中自動(dòng)發(fā)送等等
第三部分:空行合住,請(qǐng)求頭部后面的空行是必須的
即使第四部分的請(qǐng)求數(shù)據(jù)為空绰精,也必須有空行撒璧。
第四部分:請(qǐng)求數(shù)據(jù)也叫主體,可以添加任意的其他數(shù)據(jù)笨使。
這個(gè)例子的請(qǐng)求數(shù)據(jù)為空卿樱。
POST請(qǐng)求例子
第一部分:請(qǐng)求行,第一行明了是post請(qǐng)求硫椰,以及http1.1版本繁调。
第二部分:請(qǐng)求頭部,第二行至第六行靶草。
第三部分:空行蹄胰,第七行的空行。
第四部分:請(qǐng)求數(shù)據(jù)奕翔,第八行裕寨。
?HTTP之響應(yīng)消息Response
一般情況下,服務(wù)器接收并處理客戶端發(fā)過(guò)來(lái)的請(qǐng)求后會(huì)返回一個(gè)HTTP的響應(yīng)消息糠悯。
HTTP響應(yīng)也由四個(gè)部分組成,分別是:狀態(tài)行妻往、消息報(bào)頭互艾、空行和響應(yīng)正文。
第一部分:狀態(tài)行讯泣,由HTTP協(xié)議版本號(hào)纫普, 狀態(tài)碼, 狀態(tài)消息 三部分組成好渠。
第一行為狀態(tài)行昨稼,(HTTP/1.1)表明HTTP版本為1.1版本,狀態(tài)碼為200拳锚,狀態(tài)消息為(ok)
第二部分:消息報(bào)頭假栓,用來(lái)說(shuō)明客戶端要使用的一些附加信息
第二行和第三行和第四行為消息報(bào)頭,
Date:生成響應(yīng)的日期和時(shí)間霍掺;Content-Type:指定了MIME類(lèi)型的HTML(text/html),編碼類(lèi)型是ISO-8859-1
第三部分:空行匾荆,消息報(bào)頭后面的空行是必須的
第四部分:響應(yīng)正文,服務(wù)器返回給客戶端的文本信息杆烁。
空行后面的html部分為響應(yīng)正文牙丽。
?HTTP之狀態(tài)碼 ? ? ? ? ? ? ? ? ??
狀態(tài)代碼有三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類(lèi)別兔魂,共分五種類(lèi)別:
1xx:指示信息--表示請(qǐng)求已接收烤芦,繼續(xù)處理
2xx:成功--表示請(qǐng)求已被成功接收、理解析校、接受
3xx:重定向--要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯(cuò)誤--請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
常見(jiàn)狀態(tài)碼:
200(成功)
302 (重定向):請(qǐng)求重定向到指定網(wǎng)頁(yè)
304(未修改):自從上次請(qǐng)求后构罗,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)铜涉。服務(wù)器返回此響應(yīng)時(shí),不會(huì)返回網(wǎng)頁(yè)內(nèi)容
401(未授權(quán)):請(qǐng)求要求身份驗(yàn)證
403(禁止):服務(wù)器拒絕請(qǐng)求(比如死循環(huán)了绰播,一直訪問(wèn))
404(未找到):服務(wù)器找不到請(qǐng)求的網(wǎng)頁(yè)
405 (方法禁用):Post請(qǐng)求當(dāng)成了Get請(qǐng)求直接訪問(wèn)
500 (服務(wù)器內(nèi)部錯(cuò)誤):有bug導(dǎo)致程序嗝屁了
502 (錯(cuò)誤網(wǎng)關(guān)):服務(wù)器從上游接到了無(wú)效響應(yīng)
504 ( 網(wǎng)關(guān)超時(shí)):nginx請(qǐng)求超時(shí)骄噪,請(qǐng)求一直沒(méi)有返回
HTTP請(qǐng)求方法 ? ? ? ? ? ? ? ? ?
根據(jù)HTTP標(biāo)準(zhǔn),HTTP請(qǐng)求可以使用多種請(qǐng)求方法蠢箩。
HTTP1.0定義了三種請(qǐng)求方法:GET,POST和HEAD方法链蕊。
HTTP1.1新增了五種請(qǐng)求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT 方法。
HTTP工作原理 ? ? ? ? ? ? ? ? ? ?
HTTP協(xié)議定義Web客戶端如何從Web服務(wù)器請(qǐng)求Web頁(yè)面谬泌,以及服務(wù)器如何把Web頁(yè)面?zhèn)魉徒o客戶端滔韵。HTTP協(xié)議采用了請(qǐng)求/響應(yīng)模型≌剖担客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文陪蜻,請(qǐng)求報(bào)文包含請(qǐng)求的方法、URL贱鼻、協(xié)議版本宴卖、請(qǐng)求頭部和請(qǐng)求數(shù)據(jù)。服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng)邻悬,響應(yīng)的內(nèi)容包括協(xié)議的版本症昏、成功或者錯(cuò)誤代碼、服務(wù)器信息父丰、響應(yīng)頭部和響應(yīng)數(shù)據(jù)肝谭。
以下是 HTTP 請(qǐng)求/響應(yīng)的步驟:
1、客戶端連接到Web服務(wù)器
一個(gè)HTTP客戶端蛾扇,通常是瀏覽器攘烛,與Web服務(wù)器的HTTP端口(默認(rèn)為80)建立一個(gè)TCP套接字連接。例如镀首,http://www.oakcms.cn坟漱。
2、發(fā)送HTTP請(qǐng)求
通過(guò)TCP套接字更哄,客戶端向Web服務(wù)器發(fā)送一個(gè)文本的請(qǐng)求報(bào)文靖秩,一個(gè)請(qǐng)求報(bào)文由請(qǐng)求行、請(qǐng)求頭部竖瘾、空行和請(qǐng)求數(shù)據(jù)4部分組成沟突。
3、服務(wù)器接受請(qǐng)求并返回HTTP響應(yīng)
Web服務(wù)器解析請(qǐng)求捕传,定位請(qǐng)求資源惠拭。服務(wù)器將資源復(fù)本寫(xiě)到TCP套接字,由客戶端讀取。一個(gè)響應(yīng)由狀態(tài)行职辅、響應(yīng)頭部棒呛、空行和響應(yīng)數(shù)據(jù)4部分組成。
4域携、釋放連接TCP連接
若connection 模式為close簇秒,則服務(wù)器主動(dòng)關(guān)閉TCP連接,客戶端被動(dòng)關(guān)閉連接秀鞭,釋放TCP連接;若connection 模式為keepalive趋观,則該連接會(huì)保持一段時(shí)間,在該時(shí)間內(nèi)可以繼續(xù)接收請(qǐng)求;
5锋边、客戶端瀏覽器解析HTML內(nèi)容
客戶端瀏覽器首先解析狀態(tài)行皱坛,查看表明請(qǐng)求是否成功的狀態(tài)代碼。然后解析每一個(gè)響應(yīng)頭豆巨,響應(yīng)頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集剩辟。客戶端瀏覽器讀取響應(yīng)數(shù)據(jù)HTML往扔,根據(jù)HTML的語(yǔ)法對(duì)其進(jìn)行格式化贩猎,并在瀏覽器窗口中顯示。
?GET和POST的區(qū)別 ? ? ?
? ? ?1萍膛、GET提交的數(shù)據(jù)會(huì)放在URL之后吭服,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連卦羡,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數(shù)據(jù)放在HTTP包的Body中.
? ? ?2噪馏、GET提交的數(shù)據(jù)大小有限制(因?yàn)闉g覽器對(duì)URL的長(zhǎng)度有限制),而POST方法提交的數(shù)據(jù)沒(méi)有限制.
? ? ?3、GET方式需要使用Request.QueryString來(lái)取得變量的值惠窄,而POST方式通過(guò)Request.Form來(lái)獲取變量的值鄙煤。
? ? ?4、GET方式提交數(shù)據(jù)匣吊,會(huì)帶來(lái)安全問(wèn)題,比如一個(gè)登錄頁(yè)面,通過(guò)GET方式提交數(shù)據(jù)時(shí)吸祟,用戶名和密碼將出現(xiàn)在URL上,如果頁(yè)面可以被緩存或者其他人可以訪問(wèn)這臺(tái)機(jī)器桃移,就可以從歷史記錄獲得該用戶的賬號(hào)和密碼.
SSL協(xié)議:
HTTPS協(xié)議在HTTP的基礎(chǔ)上加入了SSL(安全套接字層)協(xié)議屋匕,SSL逐漸演變?yōu)榱薚LS協(xié)議,但是業(yè)界習(xí)慣仍然稱其為SSL協(xié)議借杰。
SSL協(xié)議在傳輸控制層的基礎(chǔ)上建立了安全的連接过吻,它作為一種通用可靠的安全解決方案,可與多種應(yīng)用層協(xié)議結(jié)合使用,實(shí)現(xiàn)應(yīng)用數(shù)據(jù)的安全傳輸纤虽。SSL協(xié)議分為記錄協(xié)議乳绕,握手協(xié)議,警告協(xié)議和密碼規(guī)范改變協(xié)議:
記錄協(xié)議:接收上層協(xié)議或下層協(xié)議的消息并進(jìn)行一系列的處理逼纸,然后再將處理后的消息繼續(xù)向下或向上傳遞洋措。主要包括對(duì)消息進(jìn)行加解密,壓縮解壓縮杰刽,分段或者重組等操作菠发。
握手協(xié)議:建立在三次握手之后,為通信雙方確立安全連接所需要的安全參數(shù)专缠,通常也會(huì)在此階段對(duì)通信雙方身份的真實(shí)性進(jìn)行驗(yàn)證雷酪。
警告協(xié)議:無(wú)論是在握手階段還是在對(duì)應(yīng)用層數(shù)據(jù)的傳輸階段,都有可能出現(xiàn)差錯(cuò)涝婉。警告協(xié)議規(guī)定了在SSL協(xié)議工作過(guò)程中可能出現(xiàn)的差錯(cuò)哥力、錯(cuò)誤的嚴(yán)重等級(jí)以及相應(yīng)的處理方式。
密碼規(guī)范改變協(xié)議:在SSL握手剛開(kāi)始的時(shí)候墩弯,加密參數(shù)還沒(méi)確定吩跋,消息都是明文傳送的。雙方協(xié)商好加密參數(shù)之后渔工,在發(fā)送握手結(jié)束消息之前锌钮,需要發(fā)送一個(gè)密碼規(guī)范改變消息(Change Cipher Message)來(lái)通知對(duì)方隨后的消息都使用剛剛協(xié)商好的加密算法和加密密鑰進(jìn)行加密。
一.為什么需要https ?
1.HTTP是明文傳輸的引矩,也就意味著,介于發(fā)送端旺韭、接收端中間的任意節(jié)點(diǎn)都可以知道你們傳輸?shù)膬?nèi)容是什么。這些節(jié)點(diǎn)可能是路由器值漫、代理等。
舉個(gè)最常見(jiàn)的例子杨何,用戶登陸沥邻。用戶輸入賬號(hào)危虱,密碼,采用HTTP的話唐全,只要在代理服務(wù)器上做點(diǎn)手腳就可以拿到你的密碼了埃跷。
? ? ? ?用戶登陸 --> 代理服務(wù)器(做手腳)--> 實(shí)際授權(quán)服務(wù)器
? ? ?2.在發(fā)送端對(duì)密碼進(jìn)行加密?沒(méi)用的,雖然別人不知道你原始密碼是多少捌蚊,但能夠拿到加密后的賬號(hào)密碼集畅,照樣能登陸。(這也是很多人覺(jué)得前端加密并沒(méi)有啥軟用)
二.HTTPS是如何保障安全的 ?
? ? ?稍微了解網(wǎng)絡(luò)基礎(chǔ)的同學(xué)都知道缅糟,HTTP是應(yīng)用層協(xié)議挺智,位于HTTP協(xié)議之下是傳輸協(xié)議TCP。TCP負(fù)責(zé)傳輸窗宦,HTTP則定義了數(shù)據(jù)如何進(jìn)行包裝赦颇。
? ? ? ? 從上面圖中我們可以看出:HTTPS相對(duì)于HTTP有哪些不同呢?其實(shí)就是在HTTP跟TCP中間加多了一層加密層TLS/SSL赴涵。
神馬是TLS/SSL媒怯?
? ? ? ?通俗的講,TLS髓窜、SSL其實(shí)是類(lèi)似的東西扇苞,SSL中文叫做“安全套接層”,SSL是個(gè)加密套件寄纵,負(fù)責(zé)對(duì)HTTP的數(shù)據(jù)進(jìn)行加密鳖敷。TLS是SSL的升級(jí)版。現(xiàn)在提到HTTPS程拭,加密套件基本指的是TLS定踱。
傳輸加密的流程
? ? ? 原先是應(yīng)用層將數(shù)據(jù)直接給到TCP進(jìn)行傳輸,現(xiàn)在改成應(yīng)用層將數(shù)據(jù)給到TLS/SSL恃鞋,將數(shù)據(jù)加密后崖媚,再給到TCP進(jìn)行傳輸。
? ? ? 就是這么回事恤浪。將數(shù)據(jù)加密后再傳輸畅哑,而不是任由數(shù)據(jù)在復(fù)雜而又充滿危險(xiǎn)的網(wǎng)絡(luò)上明文裸奔,在很大程度上確保了數(shù)據(jù)的安全资锰。這樣的話敢课,即使數(shù)據(jù)被中間節(jié)點(diǎn)截獲,壞人也看不懂濒募。
三.HTTPS是如何加密數(shù)據(jù)的 ??
一般來(lái)說(shuō)齿诉,加密分為對(duì)稱加密粤剧、非對(duì)稱加密(也叫公開(kāi)密鑰加密)抵恋。
對(duì)稱加密的意思就是弧关,加密數(shù)據(jù)用的密鑰别瞭,跟解密數(shù)據(jù)用的密鑰是一樣的蝙寨。
? ? ? ?對(duì)稱內(nèi)容加密強(qiáng)度非常高籽慢,一般破解不了箱亿。但存在一個(gè)很大的問(wèn)題就是無(wú)法安全地生成和保管密鑰届惋。假如客戶端軟件和服務(wù)器之間每次會(huì)話都使用固定的脑豹,相同的密鑰加密和解密瘩欺,肯定存在很大的安全隱患俱饿。如果
有人從客戶端端獲取到了對(duì)稱密鑰塌忽,整個(gè)內(nèi)容就不存在安全性了枣购,而且管理海量的客戶端密鑰也是一件很復(fù)雜的事情。
非對(duì)稱加密的意思就是涩堤,加密數(shù)據(jù)用的密鑰(公鑰)定躏,跟解密數(shù)據(jù)用的密鑰(私鑰)是不一樣的痊远。
? 什么叫做公鑰呢碧聪?其實(shí)就是字面上的意思——公開(kāi)的密鑰逞姿,誰(shuí)都可以查到。因此非對(duì)稱加密也叫做公開(kāi)密鑰加密栋烤。
相對(duì)應(yīng)的明郭,私鑰就是非公開(kāi)的密鑰始绍,一般是由網(wǎng)站的管理員持有话侄。
? 公鑰吞杭、私鑰兩個(gè)有什么聯(lián)系呢篇亭?
? 簡(jiǎn)單的說(shuō)就是锄贷,通過(guò)公鑰加密的數(shù)據(jù)柔昼,只能通過(guò)私鑰解開(kāi)炎辨。通過(guò)私鑰加密的數(shù)據(jù)乙嘀,只能通過(guò)公鑰解開(kāi)。
? 很多同學(xué)都知道用私鑰能解開(kāi)公鑰加密的數(shù)據(jù)曹质,但忽略了一點(diǎn)羽德,私鑰加密的數(shù)據(jù)宅静,同樣可以用公鑰解密出來(lái)究驴。而這點(diǎn)對(duì)于理解HTTPS的整套加密洒忧、授權(quán)體系非常關(guān)鍵熙侍。
? 非對(duì)稱密鑰交換很安全蛉抓,但同時(shí)也是 HTTPS 性能和速度降低的“罪魁禍?zhǔn)住薄?/p>
HTTP和HTTPS的區(qū)別有哪些?
Http協(xié)議運(yùn)行在TCP之上笑跛,明文傳輸,客戶端與服務(wù)器端都無(wú)法驗(yàn)證對(duì)方的身份几苍;Https是身披SSL(Secure Socket Layer)外殼的Http,運(yùn)行于SSL上刽宪,SSL運(yùn)行于TCP之上纠屋,是添加了加密和認(rèn)證機(jī)制的HTTP。二者之間存在如下不同:
端口不同:Http與Http使用不同的連接方式署辉,用的端口也不一樣哥攘,前者是80材鹦,后者是443逝淹;
資源消耗:和HTTP通信相比,Https通信會(huì)由于加減密處理消耗更多的CPU和內(nèi)存資源桶唐;
開(kāi)銷(xiāo):Https通信需要證書(shū)栅葡,而證書(shū)一般需要向認(rèn)證機(jī)構(gòu)購(gòu)買(mǎi);
Https的加密機(jī)制是一種共享密鑰加密和公開(kāi)密鑰加密并用的混合加密機(jī)制尤泽。
HTTP1.0欣簇,HTTP1.1以及HTTP2.0協(xié)議的區(qū)別:
答:主要區(qū)別和特點(diǎn)可以概括如下:
HTTP1.0:
HTTP1.0是一種無(wú)狀態(tài),無(wú)連接的協(xié)議坯约。瀏覽器的每次請(qǐng)求都需要與服務(wù)器建立一個(gè)TCP連接熊咽,服務(wù)器處理完成后立即斷開(kāi)TCP連接(無(wú)連接)闹丐,服務(wù)器不跟蹤每個(gè)客戶端也不記錄過(guò)去的請(qǐng)求(無(wú)狀態(tài))。也就是默認(rèn)使用Connection: close
HTTP1.1:
HTTP/1.1中默認(rèn)使用Connection: keep-alive如贷,避免了連接建立和釋放的開(kāi)銷(xiāo)楣富。但服務(wù)器必須按照客戶端請(qǐng)求的先后順序依次回送相應(yīng)的結(jié)果塘安,以保證客戶端能夠區(qū)分出每次請(qǐng)求的響應(yīng)內(nèi)容切黔。通過(guò)Content-Length字段來(lái)判斷當(dāng)前請(qǐng)求的數(shù)據(jù)是否已經(jīng)全部接收。不允許同時(shí)存在兩個(gè)并行的響應(yīng)。
HTTP2.0:
HTTP2.0協(xié)議新增了二進(jìn)制分幀叙淌,多路復(fù)用,頭部壓縮和服務(wù)器推送等功能,進(jìn)一步提高了傳輸效率次询。
Cookie+Session
HTTP協(xié)議是一種無(wú)狀態(tài)的協(xié)議盒卸,我們可以使用cookie和session來(lái)保持會(huì)話狀態(tài)谷朝。用戶發(fā)起請(qǐng)求,服務(wù)端收到請(qǐng)求處理后可以生成一個(gè)sessionId娃兽,并且將sessionId存入cookie中返回給客戶端呕寝,將session的內(nèi)容存儲(chǔ)在服務(wù)器上嚼酝。在下一次的請(qǐng)求中洼冻,客戶端帶著cookie來(lái)請(qǐng)求服務(wù)器,服務(wù)端從cookie中取出sessionId华糖,實(shí)現(xiàn)了用戶會(huì)話狀態(tài)的保持。
這樣做有一個(gè)缺點(diǎn)就是將一些東西存在了服務(wù)器上秀撇,在用戶量較大的情況下呵燕,服務(wù)器容量會(huì)不足紊撕。實(shí)際情況中笼才,經(jīng)常是將所需要的會(huì)話狀態(tài)潜支,比如說(shuō)登錄態(tài)直接存入cookie并且返回給客戶端柿汛,下次請(qǐng)求時(shí)冗酿,服務(wù)端直接取出cookie中的信息和參數(shù)信息進(jìn)行比較埠对,保持HTTP會(huì)話狀態(tài)。
總結(jié):session保存在服務(wù)端裁替。cookie保存在客戶端,并且cookie有大小限制项玛。
Session 與 Cookie 的對(duì)比
實(shí)現(xiàn)機(jī)制:Session的實(shí)現(xiàn)常常依賴于Cookie機(jī)制,通過(guò)Cookie機(jī)制回傳SessionID弱判;
大小限制:Cookie有大小限制并且瀏覽器對(duì)每個(gè)站點(diǎn)也有cookie的個(gè)數(shù)限制襟沮,Session沒(méi)有大小限制,理論上只與服務(wù)器的內(nèi)存大小有關(guān)昌腰;
安全性:Cookie存在安全隱患开伏,通過(guò)攔截或本地文件找得到cookie后可以進(jìn)行攻擊,而Session由于保存在服務(wù)器端遭商,相對(duì)更加安全固灵;
服務(wù)器資源消耗:Session是保存在服務(wù)器端上會(huì)存在一段時(shí)間才會(huì)消失,如果session過(guò)多會(huì)增加服務(wù)器的壓力劫流。