- HTTP/2 in Action 中文版
- (美)Barry Pollard(巴里·波拉德)
- 660字
- 2020-08-06 15:52:08
2.3 HTTP/1.1的其他問題
HTTP/1.1是一個簡單的文本協議。這種簡單性也帶來一些問題。盡管HTTP消息體可以包含二進制數據(比如圖片,以及客戶端和服務器能理解的任何格式),但請求和首部需要是文本的形式。文本格式對于人類來說很友好,但對于機器并不友好。HTTP文本消息處理起來很復雜,且容易出錯,會導致安全問題。例如,向HTTP首部中添加換行符,可以進行一些HTTP攻擊[11]。
HTTP使用文本格式帶來的另外一個問題是,HTTP消息較大,這是因為不能高效編碼數據(比如使用數字來表達Date首部,而不是使用人類可讀的完整文本),而且首部內容也有重復。還是那句話,在早期Web只需要單個請求,這不會有問題,但隨著請求數的增長,使用文本格式就顯得效率很低了。HTTP首部的應用很廣泛,這就帶來了很多重復性問題。例如,就算只有主頁需要cookie,每個發向服務器的HTTP請求中都會包含cookie。通常,靜態資源,如圖片、CSS和JavaScript都不需要cookie。域名分片,如本章前面講過的,主要用來提供更多連接數,但它也用來創建所謂的無cookie域名。出于性能和安全的考慮,瀏覽器不會向這些域名發送cookie。同樣HTTP響應的首部也變得龐大了許多,像Content-Security-Policy這種關于安全的首部,會導致HTTP首部非常大,從而使效率低下的問題越來越突出。很多網站需要加載上百個資源,龐大的HTTP首部可能會帶來幾十甚至上百KB的數據傳輸。
性能問題是HTTP/1.1需要改善的其中一個問題。除此之外,它還存在純文本協議的安全和隱私問題(HTTPS加密很好地解決了這個問題),以及缺少狀態的問題(cookie在一定程度上解決了這個問題)。在第10章,我們會對這些問題進行更多的探究。然而對很多人來講,想要解決這些性能問題,而不引入新問題,并不容易。