簡單的HTTP協(xié)議
? ? HTTP協(xié)議用于客戶端與服務(wù)器端之間的通信
? ? ? ? 請求訪問文本或圖像等資源的一端稱為客戶端箫爷,而提供資源響應(yīng)的一端稱為服務(wù)器端场绿。
? ? ? ? 應(yīng)用HTTP協(xié)議時(shí),必定一端擔(dān)任客戶端角色灼擂,另一端擔(dān)任服務(wù)器端角色壁查。
? ? 通過請求和響應(yīng)的及哦啊換達(dá)成通信
? ? ? ? 請求必定由客戶端發(fā)出,而服務(wù)器端回復(fù)響應(yīng)剔应。
? ? ? ? 一個(gè)請求報(bào)文包含了請求方法睡腿、請求URI、協(xié)議版本峻贮、可選的請求首部字段和內(nèi)容實(shí)體構(gòu)成的席怪。
????????響應(yīng)報(bào)文基本上由協(xié)議版本、狀態(tài)碼纤控、用于解釋狀態(tài)碼的原因短語挂捻、可選的響應(yīng)首部字段以及實(shí)體主體構(gòu)成。
????HTTP是不保存狀態(tài)的協(xié)議
? ? ? ? 無狀態(tài)協(xié)議意思是HTTP協(xié)議自身并不對請求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存船万,最簡單的例子就是你在登陸電商網(wǎng)站進(jìn)行購物時(shí)刻撒,如果你點(diǎn)擊了商品詳情頁面后再回到剛剛的頁面這個(gè)時(shí)候系統(tǒng)就會(huì)讓你再次進(jìn)新登錄。
? ? ? ? HTTP/1.1雖然是無狀態(tài)協(xié)議唬涧,但為了實(shí)現(xiàn)期望的登陸狀態(tài)功能于是引入了Cookie技術(shù)疫赎,有了Cookie技術(shù)再用HTTP協(xié)議通信時(shí)盛撑,就可以管理狀態(tài)了碎节。有關(guān)于Cookie技術(shù)的講解將會(huì)在后續(xù)的文章中進(jìn)行解釋。
? ? 請求URI定位資源
? ? ? ? HTTP協(xié)議使用URI定位互聯(lián)網(wǎng)上的資源抵卫。
? ? ? ? 在首部字段Host中寫明網(wǎng)絡(luò)域名或IP地址狮荔,除此之外如果不是訪問特定的資源而是對服務(wù)器本身發(fā)起請求,可以用一個(gè)*代替請求URI介粘。
告知服務(wù)器意圖的HTTP方法
? ? GET:獲取資源
? ? ? ? ? ? GET方法用來請求訪問已被URI識別的資源殖氏。一般訪問均為GET訪問,比如網(wǎng)站的超鏈接姻采。
? ? POST:傳輸實(shí)體主體
? ? ? ? ? ? 在此我理解為GET請求的PRO版雅采,一般使用在提交驗(yàn)證信息時(shí),比如登錄注冊慨亲。
? ? ?PUT:傳輸文件
? ? ? ? ? ? PUT方法用來傳輸文件婚瓜,PUT方法用來傳輸文件。就像FTP協(xié)議的文件上傳一樣刑棵,要求在請求報(bào)文的主體中包含文件內(nèi)容巴刻,然后保存到請求URI指定的位置。但是蛉签,鑒于HTTP/1.1的PUT方法自身不帶驗(yàn)證機(jī)制胡陪,任何人都可以上傳文件沥寥,存在安全性問題,因此一般的Web網(wǎng)站不使用該方法柠座。若配合Web應(yīng)用程序的驗(yàn)證機(jī)制邑雅,或架構(gòu)設(shè)計(jì)采用REST(Representational State Transfer,表征狀態(tài)轉(zhuǎn)移)標(biāo)準(zhǔn)的同類Web網(wǎng)站妈经,就可能會(huì)開放使用PUT方法蒂阱。?
? ? ? HEAD:獲得報(bào)文首部
? ? ? ? ? ? ? ? 可以獲取通信狀態(tài),用于確認(rèn)URI的有效性及資源更新的日期時(shí)間等
? ? ? ?DELETE:刪除文件
? ? ? ? ? ? ? ? 按請求URI刪除指定的資源狂塘,但是录煤,HTTP/1.1的DELETE方法本身和PUT方法一樣不帶驗(yàn)證機(jī)制,所以一般的Web網(wǎng)站也不使用DELETE方法荞胡。當(dāng)配合Web應(yīng)用程序的驗(yàn)證機(jī)制妈踊,或遵守REST標(biāo)準(zhǔn)時(shí)還是有可能會(huì)開放使用的。
????????OPTIONS:詢問支持的方法
? ? ? ? ? ? ? ? ? ? 用來查詢針對請求URI指定的資源支持的方法泪漂。
? ? ? ? ?TRACE:追蹤路徑
? ??????????????????讓W(xué)eb服務(wù)器端將之前的請求通信環(huán)回給客戶端的方法廊营。在Max-Forwards首部字段中填入數(shù)值,每經(jīng)過一個(gè)服務(wù)器端就將該數(shù)字減1萝勤,當(dāng)數(shù)值剛好減到0時(shí)露筒,就停止繼續(xù)傳輸TRACE方法就是用來確認(rèn)連接過程中發(fā)生的一系列操作。但是敌卓,TRACE方法本來就不怎么常用慎式,再加上它容易引發(fā)XST(Cross-Site Tracing,跨站追蹤)攻擊趟径,通常就更不會(huì)用到了瘪吏。
????????????CONNECT:要求用隧道協(xié)議連接代理
? ?????????????????????要求在與代理服務(wù)器通信時(shí)建立隧道,實(shí)現(xiàn)用隧道協(xié)議進(jìn)行TCP通信蜗巧。主要使用SSL(Secure Sockets Layer掌眠,安全套接層)和TLS(Transport Layer Security,傳輸層安全)協(xié)議把通信內(nèi)容加密后經(jīng)網(wǎng)絡(luò)隧道傳輸幕屹。
????????????????????CONNECT方法的格式為:CONNECT 代理服務(wù)器名:端口號 HTTP版本?
使用方法下達(dá)命令
? ? 方法的作用在于蓝丙,可以指定請求的資源按期望產(chǎn)生某種行為。望拖、
持久連接節(jié)省通信量
? ? 通常在一個(gè)HTML頁面里面會(huì)有文字與很多圖片渺尘,所以通常在一個(gè)請求中也會(huì)有很多的小請求用來自動(dòng)產(chǎn)生去請求頁面所需要的圖片等資源,但是每一個(gè)請求結(jié)束后都會(huì)進(jìn)行斷開TCP連接靠娱,再請求下一張圖片時(shí)又會(huì)重新建立請求沧烈,這樣造成了通信量的開銷。
? ? 持久連接
? ? ? ? 持久連接的特點(diǎn)就是只要任意一端沒有明確提出斷開連接像云,則保持TCP連接狀態(tài)锌雀。這樣不但減輕了服務(wù)器的負(fù)載還使Web頁面的顯示速度提高了蚂夕。所以在HTTP/1.1中,所有的連接默認(rèn)都是持久連接腋逆。
????管道化
? ? ? ? 持久連接使得多數(shù)請求以管道化方式發(fā)送成為可能婿牍,從前發(fā)送請求后需要等待并收到響應(yīng),才能發(fā)送下一個(gè)請求惩歉。管道化技術(shù)出現(xiàn)后等脂,不用等待響應(yīng)亦可直接發(fā)送下一個(gè)請求。
使用Cookie的狀態(tài)管理
? ??無狀態(tài)協(xié)議當(dāng)然也有它的優(yōu)點(diǎn)撑蚌。由于不必保存狀態(tài)上遥,自然可減少服務(wù)器的CPU及內(nèi)存資源的消耗。Cookie技術(shù)通過在請求和響應(yīng)報(bào)文中寫入Cookie信息來控制客戶端的狀態(tài)争涌。
????Cookie會(huì)根據(jù)從服務(wù)器端發(fā)送的響應(yīng)報(bào)文內(nèi)的一個(gè)叫做Set-Cookie的首部字段信息粉楚,通知客戶端保存Cookie。當(dāng)下次客戶端再往該服務(wù)器發(fā)送請求時(shí)亮垫,客戶端會(huì)自動(dòng)在請求報(bào)文中加入Cookie值后發(fā)送出去模软。