浅析HTTP协议
HTTP協(xié)議是什么
HTPP協(xié)議是一種網(wǎng)際層協(xié)議,HTTP協(xié)議是無(wú)狀態(tài)的,HTTP協(xié)議對(duì)用戶是透明的。
每一次HTTP請(qǐng)求都是一次事務(wù),一個(gè)HTTP事務(wù)是由一條請(qǐng)求命令和一個(gè)響應(yīng)結(jié)果組成的,HTTP通信的最基本單位是HTTP報(bào)文。
形象通俗的概念理解HTTP協(xié)議
其實(shí)我覺(jué)得HTTP請(qǐng)求就好像去商店(服務(wù)器)買東西(請(qǐng)求資源)一樣,比如說(shuō)我拿錢去商店,然后說(shuō)要買瓶礦泉水,然后商店老板收錢之后把我的礦泉水交到我手里,這就是完成了一次交易,也就是一次HTTP事務(wù)。而買東西需要錢就是一個(gè)約定,也就是HTTP協(xié)議.
理想狀態(tài)就是拿錢買東西,但是這個(gè)過(guò)程往往不會(huì)永遠(yuǎn)都那么順利,總會(huì)有各種各樣的意外情況。
1.馬上放假了,為了準(zhǔn)備我的冬眠計(jì)劃,于是我準(zhǔn)備儲(chǔ)存一下要過(guò)冬的糧食,于是到到商店買了泡面五連包(?_?),給了十塊錢,這是時(shí)候商店老板很尷尬的說(shuō)了一句,HTTP 100 continue,不好意思,還差兩塊五-_-||,沒(méi)辦法,只能再掏出兩塊五拉,這個(gè)時(shí)候商店老板很高興的說(shuō)了一句HTTP 200 OK,拿好你的東西慢走啊!
2.最近商店決定裝修了,門口貼出了一張告示(HTTP 302 Move temporarily),商店裝修,臨時(shí)移動(dòng)到隔壁了,請(qǐng)到隔壁買東西,那沒(méi)辦法,東西還得買,過(guò)冬糧食不能少啊,結(jié)果沒(méi)過(guò)兩天,商店又貼出告示,(HTTP 301 Moved Permanently),裝修花費(fèi)的時(shí)間太長(zhǎng)拉,以后就到隔壁買東西吧,好吧,以后就只到隔壁買拉(@_@)
3.商店推出了新的活動(dòng),有特價(jià)的機(jī)械炫酷版鍵鼠,我看著很心動(dòng),于是準(zhǔn)備買下來(lái),但是商店老板說(shuō):(HTTP 401 Unauthorized ),這是會(huì)員專屬商品,得辦會(huì)員卡才能買,好吧~為了買到我心愛(ài)的機(jī)械鍵鼠,辦卡就辦卡吧
? 剛好這個(gè)時(shí)候,隔壁的張三同學(xué)來(lái)了,這個(gè)人心眼比較壞,拿著一張20元的假幣去買飲料,不巧的是商店老板慧眼如炬,直接就發(fā)現(xiàn)了,然后告訴他(HTTP 403 Forbidden),我們這不收假幣(-_-||)
? 過(guò)了一段時(shí)間之后,我總感覺(jué)自己的電腦很慢,于是我琢磨著要換個(gè)好一點(diǎn)的CPU,不要太好的就用core i7 6700的cpu吧,然后我興致勃勃的跑到商店,結(jié)果迎來(lái)一盆冷水:你要買的這個(gè)東西,暫時(shí)還沒(méi)有貨(HTTP 404 not found),好吧,等你們進(jìn)貨了記得告訴我(-_-||)
4.最近流感很嚴(yán)重,我準(zhǔn)備到商店買感冒藥(ps:萬(wàn)能的商店啊,什么都能買,就像機(jī)器貓的口袋一樣),但是很不湊巧,商店老板也感冒了,門口特出了告示:(HTTP 500 Internal Server Error),老板生病了,暫不提供服務(wù)(-_-||),老板知道這件事情之后,他覺(jué)得這樣會(huì)損失很多生意,于是招了個(gè)伙計(jì)(網(wǎng)關(guān)),然后老板只要收錢就行了,跑腿的事就讓伙計(jì)去干,正巧我今天剛好下班回家,準(zhǔn)備買點(diǎn)八寶粥回去吃,結(jié)果新來(lái)的伙計(jì)還沒(méi)開(kāi)始上班,老板只能無(wú)奈的說(shuō)(502 bad gateway),伙計(jì)還沒(méi)來(lái),我感冒還沒(méi)好,你過(guò)一個(gè)小時(shí)再來(lái)吧,過(guò)了一個(gè)小時(shí),伙計(jì)來(lái)了,老板讓他去倉(cāng)庫(kù)里拿那個(gè)銀鷺的桂圓蓮子八寶粥,伙計(jì)剛好第一天上班,找了半天沒(méi)找著,我餓的實(shí)在不行了,老板只能很無(wú)奈的告訴我(HTTP 504 gateway timeout),新來(lái)的伙計(jì)不懂業(yè)務(wù),你今天還是別吃這個(gè)了,弄點(diǎn)泡面吃吧(-_-|| 老板的都知道我愛(ài)吃泡面了)
因?yàn)榈昀锸裁炊假u,所以店里的客戶越來(lái)越多了,老板的精力有限,沒(méi)有辦法記得過(guò)來(lái)那么多熟人,起初為了讓老板能夠記住我這個(gè)吃泡面的常客,于是我告訴他,我住在你后面那棟樓(IP地址記憶),但是我轉(zhuǎn)念一想,后面那棟樓可能不止我一個(gè)人啊,萬(wàn)一我要是搬家了呢,老板豈不是記不住我了-_-||,于是我用了一種比較笨的辦法,把我的名字和住址貼到我的衣服上(胖url方式),這樣老板每次一看紙條就能知道我是誰(shuí)了。但是感受到無(wú)數(shù)人異樣的眼光之后,我覺(jué)得有必要和商店老板商量一下了,就采用辦會(huì)員卡(session)的形式來(lái)記住那些常客吧,讓他們登記一下姓名和電話之后,給他們發(fā)一張卡(sessionid),然后每次來(lái)只要刷一下卡,就能立刻認(rèn)出是誰(shuí)拉。老板聽(tīng)了我的仔細(xì)分析之后,覺(jué)得這個(gè)方法非常好,于是就采用了這種方式來(lái)記住客戶。后來(lái)每次買東西,我只要從口袋(cookie)里掏出我的會(huì)員卡刷一下,老板就能立刻知道我是誰(shuí)了(老板比較健忘,我買了那么多泡面,都記不住我-_-||)
理想是好的,但是老板發(fā)現(xiàn),并不是所有的人都有口袋(客戶端禁用cookie),就比如說(shuō)我樓下的小花,每天都是穿裙子,根本沒(méi)有口袋啊,那就只能拿在手里拉(把session放在隱藏域表單),或者是掛在自己的脖子上(sessionid放在url中),這樣老板就能記住拉,但是直接暴露在別人的視線下,太不安全拉,畢竟財(cái)不外漏嘛,雖然放在口袋里,也有被人順走的情況(cookie劫持),但比放手上要好點(diǎn)吧,果不其然,隔壁的張三同學(xué)就使壞,把小花的會(huì)員卡(sessionid)給順手牽羊了,然后直接拿著會(huì)員卡去買東西了(跨站請(qǐng)求偽造csrf),但是老板記性不好,只要有卡就行,至于拿卡的是不是本人,那他就管不著了。老板記性很差,這也是沒(méi)有辦法的事情,只能提醒一下各位,請(qǐng)保管好自己的會(huì)員卡,老板只認(rèn)卡不認(rèn)人(-_-||)
雖然老板記性不是很好,但是為人踏實(shí)敬業(yè),隨著他的努力,客戶越來(lái)越多了,這個(gè)時(shí)候一家店就忙不過(guò)來(lái)了,于是老板決定開(kāi)分店(服務(wù)器集群,負(fù)載均衡),但是分店開(kāi)起來(lái)之后,我發(fā)現(xiàn)我在這里辦的會(huì)員卡在那邊分店居然不能使用,這我就不能忍了,為什么都是你開(kāi)的店,這邊的會(huì)員卡那邊不能用呢(?_?),于是我只能跟老板說(shuō),既然都是會(huì)員,那么這個(gè)會(huì)員卡必須是兩邊都能刷的(seesion共享),不然客戶肯定不滿意對(duì)吧,老板聽(tīng)了我分析之后,決定專門設(shè)立一處管理會(huì)員卡的地方(session服務(wù)器),這樣買完?yáng)|西直接到專門刷卡的地方去就好了。采用了這樣的方法之后,辦卡的人就越來(lái)越多了,為了方便大家刷卡,只能多搞幾個(gè)會(huì)員卡卡管理處了(session集群),這樣的話差不多就沒(méi)有什么大問(wèn)題了。不過(guò)分店開(kāi)了,會(huì)員卡也管理好了,但是這個(gè)貨物渠道出了點(diǎn)問(wèn)題,買東西的人太多,一個(gè)倉(cāng)庫(kù)的貨物已經(jīng)不夠用了啊,只能多搞幾個(gè)倉(cāng)庫(kù)拉(分庫(kù)),水果就專門放水果倉(cāng)庫(kù),蔬菜就專門蔬菜的倉(cāng)庫(kù),零食就弄零食倉(cāng)庫(kù)拉,但是水果里面,西瓜進(jìn)的太多了,沒(méi)有辦法,西瓜多搞點(diǎn)空地放吧(分表),這樣管理就差不多了。
看到商場(chǎng)越來(lái)越大,我覺(jué)得很欣慰。恰好又是要過(guò)冬的時(shí)候了,該儲(chǔ)備糧食拉,我拿著會(huì)員卡說(shuō)買個(gè)五連包,但是零食賣的太快了,商店的柜臺(tái)上(緩存)沒(méi)有了,然后老板讓伙計(jì)(網(wǎng)關(guān))去倉(cāng)庫(kù)拿一些過(guò)來(lái),伙計(jì)按照老板的吩咐來(lái)到了倉(cāng)庫(kù),發(fā)現(xiàn)倉(cāng)庫(kù)正在進(jìn)貨(表級(jí)鎖定),不讓取貨物,這個(gè)可把我等壞了,我不就買了泡面么,居然等了幾個(gè)小時(shí),時(shí)間再長(zhǎng)一點(diǎn),我都要餓死了(?_?),這樣很明顯是不對(duì)的吧,我只能再次的給老板建議拉,你這個(gè)進(jìn)貨和拿貨應(yīng)該分開(kāi)來(lái)弄(讀寫分離),弄一個(gè)倉(cāng)庫(kù)專門進(jìn)貨,另一個(gè)倉(cāng)庫(kù)專門拿貨比較好(主從配置),然后讓這個(gè)拿貨的倉(cāng)庫(kù)安排一個(gè)專門的工作人員,把新進(jìn)的貨物運(yùn)到這個(gè)倉(cāng)庫(kù)來(lái)就好了啊,這樣就不會(huì)存在讓客戶等好長(zhǎng)時(shí)間了。健忘的老板果斷的采用了這一建議,看著我買泡面的地方,一步步的成長(zhǎng)到這個(gè)高度,我感覺(jué)非常的欣慰,我決定了,以后吃泡面就認(rèn)準(zhǔn)這家店了,其他地方哪都不去(@_@)
轉(zhuǎn)載于:https://www.cnblogs.com/crisenchou/p/5658147.html
總結(jié)
- 上一篇: 《C++标准库》
- 下一篇: CentOS进不了mysql