不管是前端還是后端,必須要了解的知識中,HTTP是必不可少的。所以就有必要來講解下HTTP。還是從終極三問的“什么”開始吧!
什么是HTTP?
HTTP是超文本傳輸協議。它是應用層協議的一種,是無狀態的協議。主要是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先于圖形)等。默認HTTP的端口號為80,我們來看下它在TCP/IP協議棧中的位置:
HTTP協議本身是不對請求和響應之間的通信狀態保存的。那為什么要這樣呢?其實這主要是為了更快地處理大量的請求,確保協議的可伸縮性,特意將協議設計的這么簡單。
那如果要保存狀態該怎么辦?HTTP/1.1就提出了解決方案,雖然還是無狀態的,但是引入了cookie技術,相比大家上網的話都應該碰到過“詢問退出是否清楚cookie”,就是這個東西。當有了cookie之后,就可以管理狀態了。
HTTP方法
面向對象編程的時候,對象總是會有一些操作方法。以此類推HTTP作為協議,它也有操作方法。HTTP的方法有哪些呢?它有什么用處呢?,下面一一為大家解答。
- GET方法:顧名思義,獲取資源。用來請求URI識別的資源,然后從服務器解析后返回響應內容;
- POST方法:傳輸內容。雖然GET也可以用來傳輸內容,但是一般不這么做的。POST的主要目的并不是獲取內容。
- PUT方法:傳輸文件。就想FTP協議中的請求文件上傳一樣,要求在請求報文的實體中包含文件內容,然后保存到請求的URI指定的位置。但是鑒于HTTP1.1的PUT方法自身不帶有驗證機制,任何人都可以上傳文件,存在安全問題,因此一般的網站不選用這種方式。如果配合Web應用程序的驗證機制,或架構設計采用REST標準的同類Web網站,就可能會開放使用PUT方法。
- HEAD方法:用來獲取報文首部。用于確認URI的有效性以及資源更新的日期時間等
- DELETE方法:用來刪除文件的。與PUT方法相反。
- OPTIONS方法:用來查詢針對請求的URI指定的資源方法。
- TRACE方法:用來追蹤路徑。這個就不講了,不常用。
- CONNECT方法:主要用來在與代理服務器通信的時候建立隧道。隧道協議使用SSL,TLS協議加密內容經過TCP傳輸的。
keep alive
在HTTP協議中,每一次通信就會連接和斷開一次TCP鏈接。如下圖:
在每一次的請求和響應都是一次完整的TCP連接的建立和斷開,TCP的握手和揮手的開銷對于頻繁的通信來說是不可接受的。所以為了解決這個問題,提出了持久連接。也就是keep alive ??聪聢D:
這樣做的優點:
- 減少TCP握手和揮手的開銷
- 減輕了服務器的負載
你以為做就完美了嗎?其實不然,每一次通信都需要HTTP響應,才能發送下一個包,這樣效率豈不是很慢。所以就引入了管線化技術。
管線化
也就是不用等待響應,就可以直接發送下包數據了。如下圖所示:
cookie技術
在上文中,講述到cookie技術,它的原理就是:根據服務端發送來的響應報文中,有個set-Cookie的首部字段,通知客戶端保存cookie。等到下次客戶端需要訪問服務端的時候,將保存的cookie發送出去。如下圖所示:
第一次請求:
第二次請求:
總結
本文只是講了原理,提供了一種理解HTTP的思路,當然HTTP遠不止這么簡單。要精通HTTP還需多實踐,畢竟實踐出真知。