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