當前位置:
首頁 > 最新 > 那些冷門的HTTP知識點

那些冷門的HTTP知識點

稍微了解過Web開發相關技術的人都對於HTTP協議都不會陌生,HTTP是個簡單易上手的文本協議,以至於可能很多人做了很久web開發,依然對於很多HTTP協議的知識點不慎了解,本文就討論下那些關於HTTP協議的出鏡率不那麼高的一些知識點。

關於URL,可以把網站的網址URL分為三部分:

以 http://marvinio.com/2018/03/ubuntu-init-config/ 為例

Scheme:大家現在都對http習以為常,但是在更遙遠的年代,比如我的大學時代,大家更喜歡使用ftp協議去伺服器down各種資源,ftp也是類似http一種scheme,scheme會告知web客戶端怎樣訪問伺服器資源。

域名:域名是告訴客戶端伺服器在哪裡,域名經過DNS伺服器轉換為IP,IP定位到伺服器,80埠定位到Web應用。

資源路徑:/2018/03/ubuntu-init-config/,找到了伺服器之後,還有具體定位到資源的詳細位置,這個由資源路徑來指明,當然通過web伺服器的重寫(rewrite),用戶客戶端上看到的資源路徑可能未必是真實的。

HTTP的性能聚焦區域:TCP協議

TCP連接建立握手;

TCP慢啟動擁塞控制;

數據聚集的Nagle演算法;

用於捎帶確認的TCP延遲確認演算法;

TIME_WAIT時延和埠耗盡。

Web伺服器都做了什麼

建立連接——接受一個客戶端連接,或者如果不希望與這個客戶端建立連接,就將其關閉。

接收請求——從網路中讀取一條HTTP請求報文。

處理請求——對請求報文進行解釋,並採取行動。

訪問資源——訪問報文中指定的資源。

構建響應——創建帶有正確首部的HTTP響應報文。

發送響應——將響應回送給客戶端。

記錄事務處理過程——將與已完成事務有關的內容記錄在一個日誌文件中。

代理與網關的對比

嚴格來說,代理連接的是兩個或多個使用相同協議的應用程序。

網關連接的則是兩個或多個使用不同協議的端點。網關扮演的是「協議轉換器」的角色,即使客戶端和伺服器使用的是不同的協議,客戶端也可以通過它完成與伺服器之間的事務處理。

HTTP緩存的處理步驟(以一個GET報文的基本緩存處理過程為例)

接收——緩存從網路中讀取抵達的請求報文。

解析——緩存對報文進行解析,提取出URL和各種首部。

查詢——緩存查看是否有本地副本可用,如果沒有,就獲取一份副本(並將其保存在本地)。

新鮮度檢測——緩存查看已緩存副本是否足夠新鮮,如果不是,就詢問伺服器是否有任何更新。

創建響應——緩存會用新的首部和已緩存的主體來構建一條響應報文。

發送——緩存通過網路將響應發回給客戶端。

日誌——緩存可選地創建一個日誌文件條目來描述這個事務。

Content-Length與持久連接

Content-Length首部對於持久連接是必不可少的。如果響應通過持久連接傳送,就可能有另一條HTTP響應緊隨其後。客戶端通過Content-Length首部就可以知道報文在何處結束,下一條報文從何處開始。因為連接是持久的,客戶端無法依賴連接關閉來判別報文的結束。

如果主體進行了內容編碼,Content-Length首部說明的就是編碼後(encoded)的主體的位元組長度,而不是未編碼的原始主體的長度。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 MarvinIO 的精彩文章:

TAG:MarvinIO |