有關http Keep Alive 的詳細解釋

2021-09-01 17:22:53 字數 988 閱讀 8742

keep-alive通俗地講,就是所謂的持久連線,對於http這種大量的短連線的服務來說,開啟持久連線的好處可以節省大量的tcp連線過程的開銷,據apache的官方文件稱對包含大量的html文件造成的延時起到50%的加速作用。而同時現有作業系統越來越先進,建立連線的開銷越來越小,像linux 2.6的epoll,freebsd的kqueue,可以讓程式不產生新程序或新執行緒的情況就能同時服務n多連線。與此同時,客戶端比如ie,firefox也可以同時開多個執行緒取內容,如果開了keepalive,反而有可能使伺服器端管理大量的等待超時的tcp連線,使伺服器端資源耗盡,而導致響應速度變慢。那麼http的keep-alive到底是啟用還是關閉呢?

說到keep-alive這個引數不得不說說這個引數在http/1.0跟http/1.1的一些區別,http/1.0的預設情況下,是不會使用keep-alive的,僅當客戶端的頭指定使用持久連線這個引數而且是要伺服器預先知道傳輸內容的長度時才會與http/1.0的客戶端建立持久連線,這意味著那些長度不定的內容,諸如php等動態頁面內容、ssi頁面、以及伺服器端生成的目錄列表等內容一般來說將無法使用與http/1.0客戶端建立的持久連線。而對於http/1.1的客戶端來說,如果沒有進行特殊指定,持久連線將是預設的連線方式。如果客戶端請求的是未知長度的內容時將使用分塊編碼的方式進行傳輸,也就是大家在http頭中看到的chunked。

由於http協議基於tcp協議,當然http協議也需要tcp的3次握手的過程,而對於乙個完整的http/1.0的請求和響應它有以下的乙個請求過程

建立tcp連線 (syn; ack, syn2; ack2; 三個分組握手完成)

請求響應

關閉連線 (fin; ack; fin2; ack2 四個分組關閉連線)

而對於乙個完整的http/1.1的請求和響應:

建立tcp連線 (syn; ack, syn2; ack2; 三個分組握手完成)

請求響應……

請求響應

關閉連線 (fin; ack; fin2; ack2 四個分組關閉連線)

HTTP KeepAlive,開啟還是關閉

所謂 http keep alive 在維基百科裡稱為 http persistent connection 說白了就是復用http連線,如此一來理論上客戶端的使用者體驗會更流暢,但是與之相對服務端不得不維持大量的連線。開啟還是關閉,這是個問題。乙個經常用來講解httpkeepalive的例子一般是...

有關Server Mappath解釋

先看圖 1,首先在本機e盤下面建立red資料夾,夾子內繼續建立conn.asp檔案,檔案內容如下 主要除錯三種路徑最後顯示的結果。2,在red資料夾下面建立資料夾database,該夾子內部存放cnbruce.mdb檔案。所以現在可以很肯定的知道資料庫檔案的絕對路徑是 e red database ...

有關於快取

我們使用快取的目的主要有如下幾點 1 減少資料庫查詢次數,降低資料庫負載。2 縮短php執行路徑,降低web前端負載。3 減少webserver的請求數量,降低web前端負載。第一項 比較接近底層,主要做細粒度資料快取,比如快取乙個資料物件,一行記錄等。只有當物件中的屬性或記錄中的字段值發生變化後使...