Keep-Alive 是什麼?

Keep-Alive 是什麼?

概觀

默認狀況下,HTTP連接一般在請求完成以後關閉。這意味着服務端在完成響應的交付以後便關閉了TCP連接。爲了讓連接保持打開,來知足多請求,可使用keep-alive 頭信息。css

沒有Keep-Alive的狀況下,HTTP是怎麼工做的

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

咱們須要Keep-Alive

建立多個連接可能會下降加載速度,同時也會利用服務器更多資源。咱們能夠經過啓用Keep-Alive來克服這個問題,經過單個連接來傳遞這些文件,如此就避免了重複的建立和關閉新鏈接。若是沒有啓用Keep-Alive,展現一個網頁的過程可能須要至關長的時間。html

如何開啓Keep-Alive

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

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

Keep-live

使用「KeepAlive On」來啓用,使用「KeepAlive Off」來禁用。開啓以後的響應頭大概以下:redis

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.2spring

MaxKeepAliveRequests

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

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」頭並不意味着連接會永遠持續,連接仍是會被關閉的。服務器

Lua腳本在redis分佈式鎖場景的運用app

CORS詳解,CORS原理分析分佈式

Keep-Alive 是什麼?

spring如何啓動的?這裏結合spring源碼描述了啓動過程

SpringMVC是怎麼工做的,SpringMVC的工做原理

spring 異常處理。結合spring源碼分析400異常處理流程及解決方法

Mybatis Mapper接口是如何找到實現類的-源碼分析

使用Netty實現HTTP服務器

Netty實現心跳機制

Netty開發redis客戶端,Netty發送redis命令,netty解析redis消息

Netty系列

相關文章
相關標籤/搜索