1. 程式人生 > >http協議Keep-Alive

http協議Keep-Alive

php 默認 頭信息 連接 持久 時間 功能 code 加載速度

Keep-Alive 是什麽?

概觀

默認情況下,HTTP鏈接通常在請求完成之後關閉。這意味著服務端在完成響應的交付之後便關閉了TCP鏈接。為了讓鏈接保持打開,來滿足多請求,可以使用keep-alive 頭信息。

沒有Keep-Alive的情況下,HTTP是怎麽工作的

  • 1.客戶端需要重新創建一個鏈接和服務器交互,用以接收一個文件。
  • 2.客戶端使用一個新的鏈接來向服務器請求HTML文件,這個連接在接收完文件的時候就會被關閉。
  • 3.瀏覽器解析HTML文件並檢查完成網頁的展示是否還需要其他文件。(例如css文件,js文件,圖片)
  • 4.經過徹底的分析,瀏覽器再重新創建鏈接來請求這每一個文件。

我們需要Keep-Alive

創建多個鏈接可能會降低加載速度,同時也會利用服務器更多資源。我們可以通過啟用Keep-Alive來克服這個問題,通過單個鏈接來傳遞這些文件,如此就避免了重復的創建和關閉新連接。如果沒有啟用Keep-Alive,展示一個網頁的過程可能需要相當長的時間。

如何開啟Keep-Alive

Keep-Alive的啟用是通過在HTTP 頭信息中明確聲明來完成的。以apache web server為例,如果你有權限訪問Apache的配置文件(httpd.conf),你可以在這裏打開keep-alive。配置方法見下文。

3個影響Keep-Alive功能的屬性。

Keep-live

使用“KeepAlive On”來啟用,使用“KeepAlive Off”來禁用。開啟之後的響應頭大概如下:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Date: Thu, 15 Jan 2017 16:45:29 GMT
Content-Length: 1845
Keep-Alive: timeout=10, max=20
Server: Apache/2.4.9 (Unix) PHP/5.6.2

MaxKeepAliveRequests

用來設置KeepAlive鏈接的最大數量。合適的值取決於實際的情況。

KeepAliveTimeout

這個設置可以防止未使用的鏈接占用太長久。其實就是鏈接需要keep多久的問題。比如設置7到10秒通常就可以了。在流量較高的情況下這個值可能就得設置大一點了,以確保沒有頻繁的TCP鏈接重新啟動。如果這個值設置太小了,那麽也許就是去了keep-alive本身的目的了。

Keep-Alive的益處

  • 1.減少CPU使用:創建一個新的TCP鏈接會消耗一些資源,例如CPU和內存的使用。使鏈接保持存活的時間長一點可以避免頻繁的創建新鏈接,從而減少資源使用。
  • 2.網頁加載速度:使用同一個鏈接來加載多個文件可以是網頁加載的快點。
  • 3.HTTPS:https非常消耗資源,所以強烈建議對https開啟keep-alive,並盡可能使用HTTP/2進行一些調整。

如果你使用的是HTTP/1.1,它的實現方式與HTTP/1.0的keek-live不同,HTTP/1.1的鏈接默認是保持活躍的,它假定所有的鏈接都是持久的,除非響應頭中包含:“Connection:close”頭。但是如果不發送“Connection:close”頭並不意味著鏈接會永遠持續,鏈接還是會被關閉的。

http協議Keep-Alive