前言
目前简僧,前端必須要了解的知識(shí)中HTTP必不可少王凑,而自己也在學(xué)習(xí)當(dāng)中兰绣,我主要是通過閱讀《圖解HTTP》進(jìn)行學(xué)習(xí)世分,下面是自己的一些讀書筆記。這一章主要簡單介紹了HTTP協(xié)議缀辩。
HTTP是一種不保存狀態(tài)的協(xié)議
HTTP是一種不保存狀態(tài)的協(xié)議
HTTP是一種無狀態(tài)的協(xié)議臭埋。HTTP協(xié)議自身不對請求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存。也就是說HTTP這個(gè)級(jí)別臀玄,協(xié)議對于發(fā)送過的請求和響應(yīng)都不做持久化的處理瓢阴。
為什么要這么做?
這是為了更快的處理大量的事務(wù)健无,確保協(xié)議的可伸縮性荣恐。而特意把HTTP設(shè)計(jì)得這么簡單的。
那么我要保存狀態(tài)的話要怎么做累贤?
HTTP/1.1提出了相應(yīng)的解決方法叠穆,雖然HTTP1.1也是無狀態(tài)的協(xié)議,但是引入了Cookie技術(shù)臼膏。有了Cookie再使用HTTP通信痹束,就可以管理狀態(tài)了。后面我會(huì)總結(jié)到Cookie讶请。
HTTP方法
HTTP方法有哪些?它們又有哪些用途
- GET方法屎媳。獲取資源夺溢。用來請求訪問一杯URI識(shí)別的資源。指定的資源經(jīng)過服務(wù)器解析后返回的響應(yīng)內(nèi)容烛谊。
-
POST方法风响。傳輸內(nèi)容實(shí)體。雖然GET方法也可以用來傳輸內(nèi)容實(shí)體丹禀,但是我們一般都不怎么做状勤。POST的主要目的并不是獲取響應(yīng)的主體內(nèi)容。
-
PUT方法双泪。傳輸文件持搜。就想FTP協(xié)議中的請求文件上傳一樣,要求在請求報(bào)文的實(shí)體中包含文件內(nèi)容焙矛,然后保存到請求的URI指定的位置葫盼。但是鑒于HTTP1.1的PUT方法自身不帶有驗(yàn)證機(jī)制,任何人都可以上傳文件村斟,存在安全問題贫导,因此一般的網(wǎng)站不選用這種方式抛猫。如果配合Web應(yīng)用程序的驗(yàn)證機(jī)制孩灯,或架構(gòu)設(shè)計(jì)采用REST標(biāo)準(zhǔn)的同類Web網(wǎng)站闺金,就可能會(huì)開放使用PUT方法。
- HEAD方法峰档。獲取報(bào)文首部 败匹。HEAD方法和GET方法一樣,只是不返回報(bào)文的主體部分面哥。用于確認(rèn)URI的有效性以及資源更新的日期時(shí)間等哎壳。
- DELETE方法。刪除文件尚卫。與PUT方法相反归榕,按照請求的URI刪除指定的資源。
- OPTIONS方法用來查詢針對請求的URI指定的資源支持的方法吱涉。
- TRACE刹泄。追蹤路徑。讓web服務(wù)器將之前的請求通信環(huán)回給客戶端的方法怎爵。發(fā)送請求的時(shí)候特石,在Max-Forwards首部字段中加入數(shù)值,每經(jīng)過一個(gè)服務(wù)器端該數(shù)字就減一鳖链,當(dāng)數(shù)值剛好減到0的時(shí)候姆蘸,就停止傳輸,最后收到請求的服務(wù)器返回的200OK的響應(yīng)芙委。
但是TRACE方法本來就不怎么常用逞敷,而且它容易引發(fā)XST(跨站追蹤),通常就更加不會(huì)用到了灌侣。
CONNECT方法推捐。要求隧道協(xié)議連接代理
CONNECT方法要求在與代理服務(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ù)器名:端口號(hào) HTTP版本
最后皮壁,我們要知道,方法的作用在于符喝,可以指定請求的資源按照期望產(chǎn)生某種行為闪彼。而且方法的名稱分大小寫之分,記得使用大寫。
持久連接節(jié)省流量
在一開始的HTTP協(xié)議中畏腕,每進(jìn)行一次HTTP 通信就斷開一次TCP連接缴川。
在請求一個(gè)很多資源的HTML頁面的時(shí)候,每次連接都會(huì)造成無所謂的TCP連接的建立和斷開描馅,增加了通信量的開銷把夸。
什么是持久連接
持久連接也被稱為HTTP keep alive或者HTTP connection reuse。它的特點(diǎn)是铭污,只要任意一端沒有明確提出斷開連接恋日,則保持TCP連接狀態(tài)。
這樣做的好處:
- 減少了TCP連接重復(fù)建立和斷開的時(shí)間開銷
- 減輕了服務(wù)端的負(fù)載
在HTTP/1.1中嘹狞,所有的連接默認(rèn)都是持久連接岂膳,但是HTTP/1.0內(nèi)比沒有標(biāo)準(zhǔn)化。雖然有一部分服務(wù)端通過一些非標(biāo)準(zhǔn)的手段實(shí)現(xiàn)了持久連接磅网,但服務(wù)端不一定能夠支持持久連接谈截。
什么是管線化
之前需要發(fā)送請求之后必須等待并且接收到回應(yīng)之后,才能發(fā)送下一個(gè)請求涧偷。管線化技術(shù)出現(xiàn)之后簸喂,就不用等待就可以發(fā)送下一個(gè)請求了。
管線化的好處
-
能夠做到同時(shí)并行發(fā)送多個(gè)請求燎潮,而不需要一個(gè)接著一個(gè)地等待響應(yīng)喻鳄。
Cookie技術(shù)
Cookie的工作原理:Cookie會(huì)根據(jù)從服務(wù)端發(fā)送的響應(yīng)報(bào)文中的一個(gè)稱set-Cookie的首部字段中,通知客戶端保存Cookie确封。當(dāng)客戶端下次再往服務(wù)端發(fā)送請求的時(shí)候除呵,客戶端會(huì)自動(dòng)在請求報(bào)文中加入Cookie值發(fā)送出去。
服務(wù)端接收到Cookie后爪喘,會(huì)去檢查究竟是從哪一個(gè)客戶端發(fā)送過來的(主要是通過對比服務(wù)端的記錄)竿奏,最后得到之前的狀態(tài)信息。
-
第一次請求的時(shí)候(也就是還沒有Cookie)
-
第二次請求的時(shí)候
上面兩次請求的請求和響應(yīng)報(bào)文如下所示:
具體的還可以看session和session_id的理解