HTTP的長鏈接和短鏈接說明

HTTP的長鏈接和短鏈接實際上是TCP的長連接和短鏈接。首先我們先介紹一下TCP/IP協議組四層模型。其中包括以下:

  1. 應用層:HTTP、FTP、DNS、TELNET等協議
  2. 傳輸層:TCP、UDP
  3. 網絡層:IP、ARP、RARP、ICMP協議等
  4. 網絡接口層:是TCP/IP協議的基層,負責數據幀的發送和接收。

接下來我們說下常見的幾個協議的作用:

  • HTTP:HTTP協議無狀態指的是對事物處理沒有記憶能力。也就是說打開一個服務器的網頁和上次打開這個網頁之間沒有任何聯系。

  • IP協議:負責解決網路路由和尋址問題

  • TCP:解決如何在IP層之上可靠的傳遞數據包。并且順序和發送順序一致,不丟包。TCP協議是可靠的、面相連接的。

  • UDP:與TCP是對應,是面相非連接的協議,只負責把數據包傳過去。數據量小、可靠性不高,可能會掉包。我們經常使用的ping命令就是發送UDP數據包。

好了好了,進入正題,開始說長鏈接和短鏈接。

短連接

在HTTP/1.0中默認是使用短連接,客戶端每進行一次http請求就建立一次連接,任務結束連接就中斷(雙方都可以發起close,一般是客戶端發起),比如訪問一個網頁或者其他web資源(img、css、js等),每遇到一個web資源就要建立一次連接。

優缺點:

因為每次通信都需要建立TCP連接,連接的建立都需要三次握手,而釋放需要四次握手。所以會浪費時間和帶寬。但是優點就是對于服務端來講,不要進行額外的控制,每條連接都是有用的。

長連接

從HTTP/1.1開始默認使用長連接。使用長連接的HTTP協議會在響應頭加入Connection: keep-alive。當打開一個網頁客戶端和服務端建立的TCP連接不會關閉。當再次訪問服務器時還會使用這個連接。但是這個狀態不會永久保持連接,可以在不同的服務器軟件(Apache)上設置。

優缺點:

減少了TCP的建立和關閉,減少浪費、節約時間。對于頻繁請求適合使用長連接,但是缺點就是隨著用戶的增多,服務器會扛不住的。所以需要采取一些策略:如關閉長時間沒有讀寫操作的連接。

應用

web網站的http服務一般都是短連接。

保活功能擴展:

如果客戶端已經消失但是連接沒有斷開,服務器會保留一個半開放的連接,而服務器又在等待客戶端的數據,此時服務端將會永遠等待。保活功能會試圖檢測半開放狀態。如果一個連接2個小時沒有任何動作,服務端會發送一個試探報文,根據客戶端響應的4個客戶端狀態進行判斷。

  1. 客戶端機正常運行,且服務器可達,此時TCP響應正常,服務器將保活定時器復位。

  2. 客戶機已經奔潰,并且關閉或者重新啟動。服務端無法收到響應。服務端每隔75秒發一次,一共發10次,若沒有收到一個響應,則認為客戶端已經關閉并且終止連接。

  3. 客戶端奔潰并已經重新啟動,服務端將收到一個對其保活探測的響應,這個響應是一個復位,使得服務器終止這個連接。

  4. 客戶機正常運行,但是服務器不可達。這種情況與第二種類似。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272175.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272175.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272175.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多生產者_你是生產者還是消費者?這決定了你的層次。

不知道你有沒有注意到,每天乘坐地鐵上下班的時候,大部分人都在刷劇、看視頻、打游戲等等,總之都屬于玩樂。用生產和消費的關系來看的話,其實這一大部分人都屬于消費者,“時間和注意力”是他們用于交換的籌碼&#xff1…

eclipse Android 開發基礎 Activity 窗體 界面

eclipse Android 開發基礎 新建工程 新建布局layout,new Android Activity就相當于窗體Form。 新建Activity自動生成src下同名的java代碼。 public class Tform2activity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(saved…

8 種常被忽視的 SQL 錯誤用法

來源&#xff1a;http://t.cn/R6UMaA11、LIMIT 語句2、隱式轉換3、關聯更新、刪除4、混合排序5、EXISTS語句6、條件下推7、提前縮小范圍8、中間結果集下推總結sql語句的執行順序&#xff1a;FROM <left_table>ON <join_condition><join_type> JOIN <right…

變頻器按啟動沒反應_起重機軟啟動柜晶閘管損壞維修幾大故障

缺相保護功能&#xff1a;工作時&#xff0c;軟起動器隨時檢測三相線電流的變化&#xff0c;一旦發生斷流&#xff0c;即可作出缺相保護反應。過熱保護功能&#xff1a;通過軟起動器內部熱繼電器檢測晶閘管散熱器的溫度&#xff0c;一旦散熱器溫度超過允許值后自動關斷晶閘管&a…

Redis 的各項功能解決了哪些問題?

作者丨blackheart先看一下Redis是一個什么東西官方簡介解釋到&#xff1a;Redis是一個基于BSD開源的項目&#xff0c;是一個把結構化的數據放在內存中的一個存儲系統&#xff0c;你可以把它作為數據庫&#xff0c;緩存和消息中間件來使用。同時支持strings&#xff0c;lists&am…

python datetime用法_python datetime用法學習筆記

一、主要思路&#xff1a;1.把表示時間的str轉換為datetime對象2.操作datetime對象輸出期望的時間格式二、把表示時間的str轉換為datetime對象語法&#xff1a;datetime.strptime(date_str, format)示例&#xff1a;date_str "2017-06-23 21:08:12"date_obj dateti…

RocketMQ集成SpringBoot

RocketMQ集成SpringBoot RocketMQ總體架構 RocketMQ基本特性

協議(Protocol)與委托代理(Delegate)

協議(Protocol)的作用&#xff1a; 1. 規范接口&#xff0c;用來定義一套公用的接口&#xff1b; 2. 約束或篩選對象。 代理(Delegate)&#xff1a; 它本身是一種設計模式&#xff0c;委托一個對象<遵守協議>去做某件事情&#xff0c;目的是為了降低對象間的耦合度&#…

ASP.NET Core 2.2+Quartz.Net 實現Web定時任務

作者&#xff1a;Julian_醬鏈接&#xff1a;http://www.cnblogs.com/mi12205599/p/10361763.html作為一枚后端程序狗&#xff0c;項目實踐常遇到定時任務的工作&#xff0c;最容易想到的的思路就是利用Windows計劃任務/wndows service程序/Crontab程序等主機方法在主機上部署定…

lj245a引腳功能圖_ULN2003A引腳圖及功能-uln2003a原理

ULN是集成達林頓管IC&#xff0c;內部還集成了一個消線圈反電動勢的二極管&#xff0c;可用來驅動繼電器。它是雙列16腳封裝,NPN晶體管矩陣,最大驅動電壓50V,電流500mA,輸入電壓5V,適用于TTL COMS,由達林頓管組成驅動電路。ULN是集成達林頓管IC,內部還集成了一個消線圈反電動勢…

RocketMQ核心概念

生產者Producer和消費者Consumer NameServer作用 Broker和Topic

交叉編譯、軟硬鏈接

什么是交叉編譯&#xff1f;交叉編譯是一個行為&#xff0c;是在一個平臺上生成另一個平臺上的可執行代碼。 本地編譯&#xff1a;本地編譯可以理解為&#xff0c;在當前編譯平臺下&#xff0c;編譯出來的程序只能放到當前平臺下運行。平時我們常見的軟件開發&#xff0c;都是…

掃地機器人狗毛_掃地機器人:我是清理狗毛的!不是清理狗屎的!

原標題&#xff1a;掃地機器人&#xff1a;我是清理狗毛的&#xff01;不是清理狗屎的&#xff01;掃地機器人可以清潔地面和角落里的垃圾&#xff0c;對于滿是毛毛的鏟屎官家庭來說&#xff0c;簡直就是福音吶&#xff01;不過最近&#xff0c;槽點卻有點多&#xff1a;家里買…

Linus下安裝maven

下載maven安裝包 wget http://mirror.bit.edu.cn/apache/maven/binaries/apache-maven-3.2.2-bin.tar.gz 解壓 tar -zxvf apache-maven-3.2.2-bin.tar.gz 配置maven環境變量 查看maven解壓后安裝包目錄 vi /etc/profile 進入最底部&#xff0c;按insert,添加環境變量&#x…

linux內核開發基礎(linux內核源碼、樹莓派源碼編譯、SD卡掛載)

首先下載樹莓派linux內核源碼&#xff1a; 下載網址&#xff1a;https://github.com/raspberrypi/linux在樹莓派使用指令&#xff1a;uname -r查看當前樹莓派的版本號&#xff0c;然后選擇對應的linux內核版本號進行下載。 將linux內核源碼從共享文件夾拷貝到SYSTEM文件夾&am…

Linux實時查看進程命令top筆記

top命令是Linux下常用的性能分析工具&#xff0c;能夠實時顯示Linux系統中各個進程的資源占用狀況&#xff0c;類似于Windows系統的任務管理器功能。 top命令的語法格式&#xff1a; top [-] [d] [p] [q] [c] [C] [S] [s] [n] 常用參數說明 d 指定每兩次屏幕信息刷新之間的時間…

C#基礎之Equals和Dispose

1.equal()和運算符的區別 由于C#中有值類型和引用類型&#xff0c;那么相等也分為值相等和引用相等。先來看一個值類型簡單的例子&#xff0c;順便也寫了string類型的比較。 static void Main(string[] args){int n1 1;int n2 1;Console.WriteLine(n1n2);Console.WriteLine(n…

mysql 時間chuo格式化_Mysql時間戳與時間格式轉換問題匯總

一、時間戳的定義時間戳指格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。二、時間格式轉時間戳的方法使用unix_timestamp函數&#xff0c;如下&#xff1a;SELECT UNIX_TIMESTAMP();//返回當前時間戳SELECT UNIX_TIMESTAMP(2017-12-16 17:29:56) AS t; //返回指定時…

文件系統(文件系統目錄結構、磁盤分區、虛擬文件系統)、linux內核結構框圖

什么是文件系統&#xff1f; 常規認知就是根目錄下那些文件&#xff0c;但其實并不是那樣。文件系統是操作系統用于明確存儲設備&#xff08;常見的是磁盤&#xff0c;也有基于NAND Flash的固態硬盤&#xff09;或分區上的文件的方法和數據結構&#xff1b;即在存儲設備上組織…