這裡有一份簡潔的前端知識體系等待你查收,看看吧,會有驚喜哦~如果覺得不錯,懇求star哈~
上篇文章簡單介紹了與HTTP關係密切的協議(IP、TCP、DNS),是為了大家對HTTP有一個整體的認識。
做為HTTP協議系列文章,HTTP才是主角。
這一節,我們來談談HTTP協議的特點,以及一些不足。
客戶端 & 服務端
網路世界中的兩臺計算機,就像現實世界中的兩個陌生人一樣,要想搭上關係,首先得先說上話。
在網路世界中,先開口的,被稱為客戶端。而做出回應的,被稱為服務端。
也就是說,在一條通訊線路上,客戶端用於請求資源,服務端用於提供資源。
事實上,HTTP協議還規定了:
- 在一條通訊線路上必定有一端是客戶端,另一端是伺服器端。
- 請求從客戶端發出,伺服器端響應請求並返回。也就是說,請求肯定是先從客戶端開始建立通訊的,伺服器端在沒有接收請求之前不會傳送響應。
關於這兩點,請先有個印象,後面談到HTTP協議的侷限性時還會談到。
無連線
對HTTP有點了解的童鞋應該都知道,HTTP協議是無連線的。
也就是說,每進行一次HTTP通訊,都要斷開一次TCP連線。
這是因為HTTP誕生之初,主要是為了應付容易很小的文字傳輸,所以即使這樣也沒多大的問題。
可隨著HTTP的普及,文件中包含大量圖片的情況多了起來,每次請求完都要斷開TCP連線,無疑增加通訊量的開銷。
為了解決TCP的連線問題,HTTP1.1提出了持久連線的方法。
所謂的持久連線,就是任意一端只要沒有明確提出斷開連線,則保持TCP連線狀態。
這樣一來,就減少了TCP連線的重複建立和斷開所造成的額外開銷,減輕了服務端的負載,Web頁面的顯示速度也就相應的提高了。
更重要的是,持久連線使得管線化成為可能。從前傳送請求後,需要收到響應了才能傳送下一個請求。管線化技術出現後,不用等待響應也可以直接傳送下一個請求了。
這樣就能夠做到同時並行傳送多個請求,而不需要一個接一個地等待響應。
管線化的效果是立竿見影的。持久連線可以讓請求更快結束,而管線化技術則比持久連線還要快,而且請求數越多,時間差就越明顯。
無狀態
除了無連線,HTTP的另一個特點是無狀態。
也就是說,HTTP協議無法根據之前的狀態進行本次的請求處理。
不可否認,不儲存狀態是有他的優點的,可以減少伺服器的CPU及記憶體資源的消耗。但問題也是顯而易見。
假設系統需要登入後才能訪問,由於無狀態的特點,每次跳轉頁面都需要重新登入,這是難以想象的。
為了解決無狀態的問題,引入了Cookie技術。
Cookie技術通過在請求和響應報文中寫入Cookie資訊來控制客戶端的狀態。
首次訪問服務端時,響應報文內會返回一個叫Set-Cookie的首部欄位資訊,通知客戶端儲存Cookie。當下次客戶端再往該伺服器傳送請求時,客戶端會自動在請求報文中加入Cookie值後傳送出去。
服務端發現客戶端傳送過來的Cookie後,會去檢查究竟是從哪個客戶端傳送來的請求,然後對比伺服器上的記錄,最後得到之前的狀態資訊。
有關請求報文和響應報文內的Cookie對應的首部欄位,接下來還會詳細介紹。
最後
最後還要囉嗦一句,現在HTTP的很多問題,看著很費解,你很難想象HTTP協議的設計者為什麼會設計出如此漏洞百出的協議。
但就像開頭所說的,技術的發展都有其侷限性,HTTP協議也是如此。
理解技術的侷限性,有利於我們開拓視野,對以後的學習是有幫助的~
好了,今天就到這,感謝您的閱讀~