來(lái)自:Pickle - 博客園
作者:Pickle
鏈接:www.cnblogs.com/wxisme/p/6212797.html(點(diǎn)擊尾部閱讀原文前往)
在互聯(lián)網(wǎng)時(shí)代HTTP協(xié)議的重要性無(wú)需多言樟凄,對(duì)于技術(shù)崗位的同學(xué)們來(lái)說(shuō)理解掌握HTTP協(xié)議是必須的襟交。本篇博客就從HTTP協(xié)議的演進(jìn)新啼、特性、重要知識(shí)點(diǎn)和工作中常見(jiàn)問(wèn)題的總結(jié)等方面進(jìn)行簡(jiǎn)單的介紹范咨。理解掌握了這些點(diǎn)工作中就OK了故觅,當(dāng)然在面試中也是少不了的,如果能結(jié)合實(shí)踐掌握這篇博客的80%應(yīng)對(duì)一般的面試應(yīng)該是夠了渠啊。如果要深入學(xué)習(xí)HTTP協(xié)議的細(xì)節(jié)請(qǐng)看那本經(jīng)典的《HTTP權(quán)威指南》输吏。
一、HTTP協(xié)議的演進(jìn)
HTTP(HyperText?Transfer?Protocol)協(xié)議是基于TCP的應(yīng)用層協(xié)議替蛉,它不關(guān)心數(shù)據(jù)傳輸?shù)募?xì)節(jié)戴尸,主要是用來(lái)規(guī)定客戶端和服務(wù)端的數(shù)據(jù)傳輸格式灭贷,最初是用來(lái)向客戶端傳輸HTML頁(yè)面的內(nèi)容。默認(rèn)端口是80。
1计济、HTTP 0.9版本 1991年
這個(gè)版本就是最初用來(lái)向客戶端傳輸HTML頁(yè)面的,所以只有一個(gè)GET命令谒府,然后服務(wù)器返回客戶端一個(gè)HTML頁(yè)面割粮,不能是其他格式。利用這個(gè)版本完全可以構(gòu)建一個(gè)簡(jiǎn)單的靜態(tài)網(wǎng)站了怎静。
2邮弹、HTTP 1.0版本 1996年
1.0版本是改變比較大的,奠定了現(xiàn)在HTTP協(xié)議的基礎(chǔ)蚓聘。這個(gè)版本的協(xié)議不僅可以傳輸HTML的文本頁(yè)面腌乡,還可以傳輸其他二進(jìn)制文件,例如圖片夜牡、視頻与纽。而且還增加了現(xiàn)在常用的POST和HEAD命令。請(qǐng)求消息和響應(yīng)消息也不是單一的了塘装,規(guī)定了一些元數(shù)據(jù)字段急迂。例如字符集、編碼蹦肴、狀態(tài)響應(yīng)碼等僚碎。
3、HTTP 1.1版本 1997年
實(shí)際上是在1.0版本之后半年時(shí)間又發(fā)布了一個(gè)版本阴幌,這個(gè)版本在1.0版本的基礎(chǔ)上更加完善了勺阐。這個(gè)版本增加了持久連接,就是說(shuō)之前版本的協(xié)議一次請(qǐng)求就是一次TCP連接矛双,請(qǐng)求完成后這個(gè)連接就關(guān)閉掉了渊抽。眾所周知TCP協(xié)議是可靠的,建立連接需要3次握手议忽,斷開(kāi)連接需要4次揮手腰吟,并且TCP有流量控制和擁塞控制,有慢開(kāi)始機(jī)制徙瓶,剛建立連接時(shí)傳輸比較慢毛雇,這是比較耗費(fèi)資源的。一個(gè)豐富的頁(yè)面會(huì)有許多圖片侦镇、表單和超鏈接灵疮。這樣的話就會(huì)有多次的HTTP請(qǐng)求,所以在這個(gè)版本上默認(rèn)不關(guān)閉TCP連接也不用聲明Connection: keep-alive字段壳繁。如果確實(shí)要關(guān)閉可以指定Connection: close字段震捣。還引入了管道機(jī)制荔棉,就是說(shuō)在一個(gè)TCP連接里可以同時(shí)發(fā)送多個(gè)HTTP請(qǐng)求,而不必等待上一個(gè)請(qǐng)求響應(yīng)成功再發(fā)送蒿赢。還增加了PUT润樱、PATCH、HEAD羡棵、 OPTIONS壹若、DELETE等命令,豐富了客戶端和服務(wù)端交互動(dòng)作皂冰。還增加了Host字段店展。
4、HTTP 2版本 2015年
這個(gè)版本也是隨著互聯(lián)網(wǎng)的發(fā)展秃流,有了新的需求制定了新的功能還有對(duì)上一個(gè)版本的完善赂蕴。1.1版本有了管道機(jī)制,但是正在服務(wù)端還是要對(duì)請(qǐng)求進(jìn)行排隊(duì)處理舶胀。這個(gè)版本可以多工的處理概说。還有了頭信息壓縮和服務(wù)器的主動(dòng)推送。
5嚣伐、HTTPS
HTTPS是HTTP協(xié)議的安全版本席怪,HTTP協(xié)議的數(shù)據(jù)傳輸是明文的,是不安全的纤控,HTTPS使用了SSL/TLS協(xié)議進(jìn)行了加密處理挂捻。
關(guān)于HTTP協(xié)議歷史演進(jìn)的詳細(xì)介紹請(qǐng)參考:http://www.ruanyifeng.com/blog/2016/08/http.html
下面介紹沒(méi)有特殊說(shuō)明默認(rèn)HTTP/1.1版本
二、HTTP協(xié)議的特點(diǎn)
1船万、HTTP協(xié)議是無(wú)狀態(tài)的
就是說(shuō)每次HTTP請(qǐng)求都是獨(dú)立的刻撒,任何兩個(gè)請(qǐng)求之間沒(méi)有什么必然的聯(lián)系。但是在實(shí)際應(yīng)用當(dāng)中并不是完全這樣的耿导,引入了Cookie和Session機(jī)制來(lái)關(guān)聯(lián)請(qǐng)求声怔。
2、多次HTTP請(qǐng)求
在客戶端請(qǐng)求網(wǎng)頁(yè)時(shí)多數(shù)情況下并不是一次請(qǐng)求就能成功的舱呻,服務(wù)端首先是響應(yīng)HTML頁(yè)面醋火,然后瀏覽器收到響應(yīng)之后發(fā)現(xiàn)HTML頁(yè)面還引用了其他的資源,例如箱吕,CSS芥驳,JS文件,圖片等等茬高,還會(huì)自動(dòng)發(fā)送HTTP請(qǐng)求這些需要的資源≌籽現(xiàn)在的HTTP版本支持管道機(jī)制,可以同時(shí)請(qǐng)求和響應(yīng)多個(gè)請(qǐng)求怎栽,大大提高了效率丽猬。
3宿饱、基于TCP協(xié)議
HTTP協(xié)議目的是規(guī)定客戶端和服務(wù)端數(shù)據(jù)傳輸?shù)母袷胶蛿?shù)據(jù)交互行為,并不負(fù)責(zé)數(shù)據(jù)傳輸?shù)募?xì)節(jié)脚祟。底層是基于TCP實(shí)現(xiàn)的∶裕現(xiàn)在使用的版本當(dāng)中是默認(rèn)持久連接的,也就是多次HTTP請(qǐng)求使用一個(gè)TCP連接由桌。
三为黎、HTTP報(bào)文
1、請(qǐng)求報(bào)文
舉例:
GET /wxisme HTTP/1.1Host: www.cnblogs.com ?? User-Agent: Mozilla/5.0(Windows; U; Windows NT5.0; zh-CN; rv:1.8.1) Gecko/20061010Firefox/2.0Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45
Cache-Control: max-age=0
簡(jiǎn)單來(lái)說(shuō)請(qǐng)求報(bào)文就是由請(qǐng)求行沥寥、請(qǐng)求頭、內(nèi)容實(shí)體組成的柠座,注意邑雅,每一行的末尾都有回車(chē)和換行,在內(nèi)容實(shí)體和請(qǐng)求頭之間另有一個(gè)空行妈经。其中請(qǐng)求行指定的是請(qǐng)求方法淮野、請(qǐng)求URL、協(xié)議版本吹泡;請(qǐng)求頭是鍵值對(duì)的形式存在的骤星,就是字段名:值;內(nèi)容實(shí)體就是要傳輸?shù)臄?shù)據(jù)爆哑。稍后會(huì)對(duì)方法洞难、請(qǐng)求頭字段做詳細(xì)的說(shuō)明。
2揭朝、響應(yīng)報(bào)文
舉例:
HTTP/1.1200OKDate: Tue,12Jul201621:36:12GMTContent-Length:563Content-Type: text/html
Hello http!
簡(jiǎn)單來(lái)說(shuō)響應(yīng)報(bào)文由狀態(tài)行队贱、響應(yīng)首部字段(響應(yīng)頭)、響應(yīng)實(shí)體組成潭袱,其中第一行是狀態(tài)行柱嫌,依次包含HTTP版本,狀態(tài)碼和狀態(tài)短語(yǔ)組成屯换;在一個(gè)回車(chē)換行之后是響應(yīng)頭编丘,也是鍵值對(duì)的形式,字段名:值彤悔;然后會(huì)有一個(gè)空行也包含回車(chē)換行嘉抓,之后是響應(yīng)實(shí)體,就是要傳輸?shù)臄?shù)據(jù)晕窑。在上面的例子當(dāng)中就是一個(gè)非常簡(jiǎn)單的HTML頁(yè)面掌眠。對(duì)于響應(yīng)狀態(tài)碼,首部字段鍵值對(duì)稍后會(huì)有更加詳細(xì)的說(shuō)明幕屹。
四蓝丙、HTTP請(qǐng)求方法
請(qǐng)求方法是客戶端用來(lái)告知服務(wù)器其動(dòng)作意圖的方法级遭。就像下達(dá)命令一樣。在HTTP1.1版本中支持GET渺尘、POST等近10種方法挫鸽。需要注意的是方法名區(qū)分大小寫(xiě),需要用大寫(xiě)字母鸥跟。下面詳細(xì)說(shuō)明丢郊。
1、GET:獲取資源
GET方法用來(lái)請(qǐng)求訪問(wèn)已被URI識(shí)別的資源医咨。也就是指定了服務(wù)器處理請(qǐng)求之后響應(yīng)的內(nèi)容枫匾。
2、POST:傳輸實(shí)體主體
POST方法用來(lái)傳輸實(shí)體主體拟淮。POST與GET的區(qū)別之一就是目的不同干茉,二者之間的區(qū)別會(huì)在文章的最后詳細(xì)說(shuō)明。雖然GET方法也可以傳輸很泊,但是一般不用角虫,因?yàn)镚ET的目的是獲取,POST的目的是傳輸委造。
3戳鹅、PUT:傳輸文件
PUT方法用來(lái)傳輸文件。類(lèi)似FTP協(xié)議昏兆,文件內(nèi)容包含在請(qǐng)求報(bào)文的實(shí)體中枫虏,然后請(qǐng)求保存到URL指定的服務(wù)器位置。
4爬虱、HEAD:獲得報(bào)文首部
HEAD方法類(lèi)似GET方法模软,但是不同的是HEAD方法不要求返回?cái)?shù)據(jù)。用于確認(rèn)URI的有效性及資源更新時(shí)間等饮潦。
5燃异、DELETE:刪除文件
DELETE方法用來(lái)刪除文件,是與PUT相反的方法继蜡。DELETE是要求返回URL指定的資源回俐。
6、OPTIONS:詢問(wèn)支持的方法
因?yàn)椴⒉皇撬械姆?wù)器都支持規(guī)定的方法稀并,為了安全有些服務(wù)器可能會(huì)禁止掉一些方法例如DELETE仅颇、PUT等。那么OPTIONS就是用來(lái)詢問(wèn)服務(wù)器支持的方法碘举。
7忘瓦、TRACE:追蹤路徑
TRACE方法是讓W(xué)eb服務(wù)器將之前的請(qǐng)求通信環(huán)回給客戶端的方法。這個(gè)方法并不常用引颈。
8耕皮、CONNECT:要求用隧道協(xié)議連接代理
CONNECT方法要求在與代理服務(wù)器通信時(shí)建立隧道境蜕,實(shí)現(xiàn)用隧道協(xié)議進(jìn)行TCP通信。主要使用SSL/TLS協(xié)議對(duì)通信內(nèi)容加密后傳輸凌停。
匯總:
五粱年、HTTP的響應(yīng)狀態(tài)碼
狀態(tài)碼是用來(lái)告知客戶端服務(wù)器端處理請(qǐng)求的結(jié)果。憑借狀態(tài)碼用戶可以知道服務(wù)器是請(qǐng)求處理成功罚拟、失敗或者是被轉(zhuǎn)發(fā)台诗;這樣出現(xiàn)了錯(cuò)誤也好定位。狀態(tài)碼是由3位數(shù)字加原因短語(yǔ)組成赐俗。3位數(shù)字中的第一位是用來(lái)指定狀態(tài)的類(lèi)別拉队。共有5種。
HTTP狀態(tài)碼一共有60多種阻逮,但是不用全部都記住粱快,因?yàn)榇蟛糠衷诠ぷ鳟?dāng)中是不經(jīng)常使用的。經(jīng)常使用的大概就是16種夺鲜,下面來(lái)詳細(xì)介紹皆尔。(其實(shí)最最常用的也就8種呐舔,下面有背景色的就是)
1币励、200:OK
這個(gè)沒(méi)有什么好說(shuō)的,是代表請(qǐng)求被正常的處理成功了珊拼。
2食呻、 204:No Content
請(qǐng)求處理成功,但是沒(méi)有數(shù)據(jù)實(shí)體返回澎现,也不允許有實(shí)體返回仅胞。比如說(shuō)HEAD請(qǐng)求,可能就會(huì)返回204 No Content剑辫,因?yàn)镠EAD就是只獲取頭信息干旧。這里簡(jiǎn)單提一下205 Reset Content,和204 No Content的區(qū)別是不但沒(méi)有數(shù)據(jù)實(shí)體返回妹蔽,而且還需要重置表單椎眯,方便用戶再次輸入。
3胳岂、206:Partial Content
這是客戶端使用Content-Range指定了需要的實(shí)體數(shù)據(jù)的范圍编整,然后服務(wù)端處理請(qǐng)求成功之后返回用戶需要的這一部分?jǐn)?shù)據(jù)而不是全部,執(zhí)行的請(qǐng)求就是GET乳丰。返回碼就是206:Partial Content掌测。
4、301 : Moved Permanently
代表永久性定向产园。該狀態(tài)碼表示請(qǐng)求的資源已經(jīng)被分配了新的URL汞斧,以后應(yīng)該使用資源現(xiàn)在指定的URL夜郁。也就是說(shuō)如果已經(jīng)把資源對(duì)應(yīng)的URL保存為書(shū)簽了,這是應(yīng)該按照Location首部字段提示的URL重新保存断箫。
5拂酣、302:Found
代表臨時(shí)重定向。該狀態(tài)碼表示請(qǐng)求的資源已經(jīng)被分配了新的URL仲义,但是和301的區(qū)別是302代表的不是永久性的移動(dòng)婶熬,只是臨時(shí)的。就是說(shuō)這個(gè)URL還可能會(huì)發(fā)生改變埃撵。如果保存成書(shū)簽了也不會(huì)更新赵颅。
6、303:See Other
和302的區(qū)別是303明確規(guī)定客戶端應(yīng)當(dāng)使用GET方法暂刘。
7饺谬、304:Not Modified
該狀態(tài)碼表示客戶端發(fā)送附帶條件請(qǐng)求時(shí),服務(wù)器端允許請(qǐng)求訪問(wèn)資源谣拣,但是沒(méi)有滿足條件募寨。304狀態(tài)碼返回時(shí)不包含任何數(shù)據(jù)實(shí)體。304雖然被劃分在3XX中但是和重定向沒(méi)有關(guān)系森缠。
8拔鹰、307:Temporary Redirect
臨時(shí)重定向,與302 Found相同贵涵,但是302會(huì)把POST改成GET列肢,而307就不會(huì)。
9宾茂、400:Bad Request
400表示請(qǐng)求報(bào)文中存在語(yǔ)法錯(cuò)誤瓷马。需要修改后再次發(fā)送。
10跨晴、401:Unauthorized
該狀態(tài)碼表示發(fā)送的請(qǐng)求需要有通過(guò)HTTP認(rèn)證的認(rèn)證信息欧聘。
11、403:Forbidden
表明請(qǐng)求訪問(wèn)的資源被拒絕了端盆。沒(méi)有獲得服務(wù)器的訪問(wèn)權(quán)限怀骤,IP被禁止等。
12爱谁、404:Not Found
表明請(qǐng)求的資源在服務(wù)器上找不到晒喷。當(dāng)然也可以在服務(wù)器拒絕請(qǐng)求且不想說(shuō)明理由時(shí)使用。
13访敌、408:Request Timeout
表示客戶端請(qǐng)求超時(shí)凉敲,就是在客戶端和服務(wù)器建立連接后服務(wù)器在一定時(shí)間內(nèi)沒(méi)有收到客戶端的請(qǐng)求。
14、500:Internal Server Error
表明服務(wù)器端在執(zhí)行請(qǐng)求時(shí)發(fā)生了錯(cuò)誤爷抓,很有可能是服務(wù)端程序的Bug或者臨時(shí)故障势决。
15、503:Service Unavailable
表明服務(wù)器暫時(shí)處于超負(fù)載或正在進(jìn)行停機(jī)維護(hù)蓝撇,現(xiàn)在無(wú)法處理請(qǐng)求果复。如果事先得知解除以上狀況需要的時(shí)間,最好寫(xiě)入Retry-After字段再返回給客戶端渤昌。
16虽抄、504:Getaway Timeout
網(wǎng)關(guān)超時(shí),是代理服務(wù)器等待應(yīng)用服務(wù)器響應(yīng)時(shí)的超時(shí)独柑,和408 Request Timeout的卻別就是504是服務(wù)器的原因而不是客戶端的原因
更加詳細(xì)的狀態(tài)碼請(qǐng)參考:http://tool.oschina.net/commons?type=5
六迈窟、HTTP的首部字段
HTTP首部字段是構(gòu)成HTTP報(bào)文最重要的元素之一。在客戶端與服務(wù)端之前進(jìn)行信息傳遞的時(shí)候請(qǐng)求和響應(yīng)都會(huì)使用首部字段忌栅,會(huì)傳遞一些重要的元信息车酣。首部字段是以鍵值對(duì)的形式存在的。包含報(bào)文的主體大小索绪、語(yǔ)言湖员、認(rèn)證信息等。HTTP首部字段包含4種類(lèi)型:
通用首部字段(General Header Fields)
代表請(qǐng)求報(bào)文和響應(yīng)報(bào)文都會(huì)使用的字段
請(qǐng)求首部字段(Request Header Fields)
是客戶端向服務(wù)端發(fā)送請(qǐng)求時(shí)使用的首部字段瑞驱。包含請(qǐng)求的附加內(nèi)容娘摔、客戶端信息、響應(yīng)內(nèi)容相關(guān)優(yōu)先級(jí)等信息钱烟。
響應(yīng)首部字段(Response Header Fields)
是服務(wù)端向客戶端返回響應(yīng)時(shí)使用的首部字段晰筛,包含響應(yīng)的附加內(nèi)容嫡丙,可能也會(huì)要求客戶端附加額外的內(nèi)容信息拴袭。
實(shí)體首部字段(Entity Header Fields)
是針對(duì)請(qǐng)求報(bào)文和響應(yīng)報(bào)文的實(shí)體部分使用的首部。包含資源內(nèi)容更新時(shí)間等和實(shí)體有關(guān)的信息曙博。
在HTTP/1.1種規(guī)定了47種首部字段(圖表參考《圖解HTTP》拥刻,感謝作者。)
通用首部字段
請(qǐng)求首部字段
響應(yīng)首部字段
實(shí)體首部字段
其他首部字段
Cookie父泳、Set-Cookie般哼、Content-Disposition、Connection惠窄、Keep-Alive蒸眠、Proxy-Authenticate、Proxy-Authorization杆融、Trailer楞卡、TE、Transfer-Encoding、Upgrade etc...
這么多的首部字段蒋腮,估計(jì)如果不是很了解會(huì)被嚇著淘捡,但是根本不用全部記住,其實(shí)字段的名字就說(shuō)明了作用池摧,看一眼就大概知道是干啥的了焦除,只不過(guò)有些類(lèi)似的字段要區(qū)分一下就好了。只要深刻理解了HTTP的設(shè)計(jì)思路就沒(méi)有大問(wèn)題了作彤,熟悉常見(jiàn)的就可以了膘魄。用到的時(shí)候想了解細(xì)節(jié)再去查。
關(guān)于首部字段的細(xì)節(jié)請(qǐng)參考《圖解HTTP》或者《HTTP權(quán)威指南》的首部字段部分竭讳。夠再寫(xiě)一篇長(zhǎng)博客的了~
以上就把HTTP協(xié)議的重點(diǎn)內(nèi)容——報(bào)文格式瓣距、方法、狀態(tài)碼代咸、首部字段介紹完了蹈丸,可以說(shuō)對(duì)HTTP協(xié)議有了一些了解。下面就工作中的常見(jiàn)問(wèn)題(或者說(shuō)面試中的)做一個(gè)總結(jié)呐芥。^_^
七逻杖、關(guān)于HTTP的常見(jiàn)問(wèn)題及解答
1、GET和POST的區(qū)別
A. 從字面意思和HTTP的規(guī)范來(lái)看思瘟,GET用于獲取資源信息而POST是用來(lái)更新資源信息荸百。
B. GET提交請(qǐng)求的數(shù)據(jù)實(shí)體會(huì)放在URL的后面,用?來(lái)分割滨攻,參數(shù)用&連接够话,舉個(gè)栗子:/index.html?name=wang&login=1
C. GET提交的數(shù)據(jù)長(zhǎng)度是有限制的,因?yàn)閁RL長(zhǎng)度有限制光绕,具體的長(zhǎng)度限制視瀏覽器而定女嘲。而POST沒(méi)有。
D. GET提交的數(shù)據(jù)不安全诞帐,因?yàn)閰?shù)都會(huì)暴露在URL上欣尼。
2、408 Request Timeout和504 Gateway Timeout的區(qū)別
408是說(shuō)請(qǐng)求超時(shí)停蕉,就是建立連接之后再約定的時(shí)間內(nèi)客戶端沒(méi)有發(fā)送請(qǐng)求到客戶端到服務(wù)端愕鼓。本質(zhì)上原因在于客戶端或者網(wǎng)絡(luò)擁塞。504是網(wǎng)關(guān)超時(shí)慧起,是說(shuō)代理服務(wù)器把客戶端請(qǐng)求轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器后再約定的時(shí)間內(nèi)沒(méi)有收到應(yīng)用服務(wù)器的響應(yīng)菇晃。本質(zhì)上原因在于服務(wù)端的響應(yīng)過(guò)慢,也有可能是網(wǎng)絡(luò)問(wèn)題蚓挤。
3磺送、Cookie和Session的區(qū)別和聯(lián)系
Cookie和Session都是為了保存客戶端和服務(wù)端之間的交互狀態(tài)剩失,實(shí)現(xiàn)機(jī)制不同,各有優(yōu)缺點(diǎn)册着。首先一個(gè)最大的區(qū)別就是Cookie是保存在客戶端而Session就保存在服務(wù)端的拴孤。Cookie是客戶端請(qǐng)求服務(wù)端時(shí)服務(wù)器會(huì)將一些信息以鍵值對(duì)的形式返回給客戶端,保存在瀏覽器中甲捏,交互的時(shí)候可以加上這些Cookie值演熟。用Cookie就可以方便的做一些緩存。Cookie的缺點(diǎn)是大小和數(shù)量都有限制司顿;Cookie是存在客戶端的可能被禁用芒粹、刪除、篡改大溜,是不安全的化漆;Cookie如果很大,每次要請(qǐng)求都要帶上钦奋,這樣就影響了傳輸效率座云。Session是基于Cookie來(lái)實(shí)現(xiàn)的,不同的是Session本身存在于服務(wù)端付材,但是每次傳輸?shù)臅r(shí)候不會(huì)傳輸數(shù)據(jù)朦拖,只是把代表一個(gè)客戶端的唯一ID(通常是JSESSIONID)寫(xiě)在客戶端的Cookie中,這樣每次傳輸這個(gè)ID就可以了厌衔。Session的優(yōu)勢(shì)就是傳輸數(shù)據(jù)量小璧帝,比較安全。但是Session也有缺點(diǎn)富寿,就是如果Session不做特殊的處理容易失效睬隶、過(guò)期、丟失或者Session過(guò)多導(dǎo)致服務(wù)器內(nèi)存溢出页徐,并且要實(shí)現(xiàn)一個(gè)穩(wěn)定可用安全的分布式Session框架也是有一定復(fù)雜度的苏潜。在實(shí)際使用中就要結(jié)合Cookie和Session的優(yōu)缺點(diǎn)針對(duì)不同的問(wèn)題來(lái)設(shè)計(jì)解決方案。