1. 程式人生 > >http的持久連線和非持久連線區別

http的持久連線和非持久連線區別

HTTP 協議概要 非持久連線


“非持久連線”的概念
某網頁由最基本的 HTML 和10個JPEG 影象構成,10個JPEG 影象檔案存放在同一臺伺服器中。設這個網頁的URL為www.server.com/somepath/index.html。如果使用者請求該網頁並採用“非持久連線”,那麼在HTTP 客戶(通常是使用者瀏覽器)和伺服器之間將發生以下操作:


1.  HTTP 客戶端初始化一個與伺服器主機www.server.com中的HTTP伺服器的TCP 連線。伺服器使用預設埠80監聽來自HTTP客戶的建立連線請求。

2.  HTTP客戶端經由與TCP關聯的本地Socket發出一個HTTP請求訊息(Request)。這個訊息中包含路徑名/somepaht/index.html。

3.  HTTP伺服器經由與TCP關聯的本地Socket接收到這個請求訊息,再從伺服器主機的記憶體或者硬碟中取出檔案/somepath/index.html,經由同一Socket向 HTTP客戶端傳送包含該檔案的響應訊息(Response Message)。

4.  HTTP伺服器通知TCP服務層關閉這個TCP連線;TCP服務層並不立即關閉這個連線,而是在客戶收到剛才那個響應訊息後才會真正終止這個連線。

5.  HTTP客戶端經由同一Socket接收這個響應訊息(Response Message)。TCP連線隨後終止。客戶端所收到的訊息中封裝了客戶端所請求的 HTML檔案。客戶端瀏覽器從中取出這個檔案,加以分析後發現這個檔案中還有有10個JPEG物件引用。

6.  對每個引用到的JPEG物件重複步驟1~4。



 

上述步驟之所以稱為使用非持久連線,原因是每次伺服器傳送一個物件後相關的TCP連線就被關閉,也就是說每個連線沒有持續到可以傳輸其他物件。每個TCP連線只能傳送一個請求訊息和響應訊息。就上述例子,使用者請求的那個Web頁面就產生了11個TCP連線(1個網頁請求連線和10個圖象請求連線)。

 

在上述的例子中,並沒有明確指出客戶是依次開啟10 逐一取得每個JPEG 物件,還是同時開啟多個 TCP連線同時取得多個 JPEG物件。實際上,現今的瀏覽器允許使用者通過配置來控制並行連線的程度。大多數瀏覽器預設可以開啟5~10個並行TCP連線,每個連線處理一個請求/響應事務。如果把並行連線數設定為1,那樣的話這個傳送JPEG的10個連線是序列建立的。使用並行連線可以縮短響應時間。



從客戶請求基本HTML檔案到它收到這個檔案所經歷的時間為往返時間(Round Trip Time - RTT)。它是一個小分組從客戶端遊動到伺服器在返回客戶端所花費的時間。RTT包括分組傳播延遲、在中間路由器和交換機上的分組排隊延遲以及分組處理延遲。下面考慮使用者點選某個超連結時會發生什麼。使用者的點選導致瀏覽器發起建立一個與Web伺服器的TCP連線;這裡涉及“三次握手”過程。首先是客戶向伺服器傳送一個小的冗餘訊息,接著是伺服器向客戶確認並以一個小的TCP訊息作為響應,最後是客戶向伺服器回送確認。“三次握手”過程的前兩次握手結束時流逝的時間為1個RTT。此時客戶把HTTP請求訊息傳送到TCP連線中,接著,客戶將第三次握手過程最後一次的確認訊息捎帶在這個請求資料分組中傳送出去。伺服器收到來自TCP的請求訊息後,把相應的HTML檔案傳送到TCP連線中,伺服器接著把對早先收到的客戶請求訊息中的確認捎帶資料包含在該HTML檔案的資料分組中傳送出去。這輪HTTP請求/響應也花費了1個RTT時間。因此,總的響應時間粗略的算是2個RTT加上伺服器傳送這個HTML檔案的時間。




持久連線

非持久連線缺點。

缺點(一)客戶得為每個待請求的物件建立並維護一個新得連線。對於每個這個的連線,TCP必須同時在客戶端和伺服器端分配TCP緩衝區,並維護TCP變數。對於有可能同時為來自數百個不同客戶的請求提供服務的Web伺服器來說,這會嚴重增加伺服器的負擔;
缺點(二)對每個物件請求都有2個RTT的響應延遲:一個RTT用於建立TCP連線,另一個RTT用於請求和接收物件;
缺點(三)每個物件都要經歷 TCP 緩啟動,因為每個TCP連線都要起始於slow start 階段。並行TCP連線的使用能夠部分減輕RTT延遲和緩啟動的影響。

在持久連線情況下,伺服器在發出響應後保持TCP連線繼續開啟著。同一客戶/伺服器之間的後續請求和響應可以通過這個連線傳遞。整個Web頁面上,比如 1個基本HTML和10個JPEG物件的頁面,可以通過單個的持久TCP連線傳送。甚至存放在同一個伺服器中的多個Web頁面也可以通過單個持久TCP連線傳送。通常,HTTP伺服器在某個連線閒置了一段時間後就關閉它,而這段時間通常是可以配置的。持久連線分為不帶流水線(without pipeline)和帶流水線(with pipeline)兩個版本。如果是步帶流水線的版本,那麼客戶只能在接收到前一個請求的響應後才會傳送新的請求。這種情況下,Web頁面所引用的每個物件(上例中的10個JPEG影象)都經歷1個RTT延遲用於請求和接收該物件。於非持久連線中每個物件需要2個RTT相比,不帶流水線的持久連線已經有所改善。不過,帶流水線的持久連線還能進一步降低響應延遲。不帶流水線版本的另一個缺點是,伺服器送出一個物件後開始等待下一個請求,而這個新的請求卻不能馬上到達。這段時間伺服器資源便閒置了。

HTTP/1.1的預設模式是使用帶流水線的持久連線。這種情況下,HTTP客戶每遇到一個物件引用就立即發出一個請求,因而HTTP客戶可以一個接一個連續發出各個引用物件的請求。伺服器收到這些請求後,也可以一個接一個連續傳送各個物件。如果所有的請求和響應都連續傳送的,那麼所有引用到的物件供給經歷1個RTT延遲,而不是像不帶流水線版本那樣,每個引用都必須有1個RTT延遲。另外,帶流水線的持久連線中伺服器空等待時間比較少。與非持久連線相比,持久連線,無論是否帶流水線降低了1個RTT延遲外,緩啟動延遲也比較小。其原因在於既然各個物件都使用同一個TCP連線,伺服器傳送第一個物件後就不必再以一開始的緩慢速率傳送後續物件了。相反,伺服器可以按照第一個物件傳送完畢後的速率傳送下一個物件。


相關推薦

http持久連線持久連線區別

HTTP 協議概要 非持久連線 “非持久連線”的概念 某網頁由最基本的 HTML 和10個JPEG 影象構成,10個JPEG 影象檔案存放在同一臺伺服器中。設這個網頁的URL為www.server.com/somepath/index.html。如果使用者請求該網頁並採用

HTTP協議:pipeline、持久連線持久連線

一、HTTP持久連線、非持久連線 1.1 定義       1. 非持久連線:每個連線處理一個請求-響應事務。       2. 持久連線:每個連線可以處理多個請求-響應事務。             持久連線情況下,伺服器發出響應後讓TCP連線繼續開啟著。同一對客戶/伺服

mysql中內連線,外連線,等值連線等值連線,自然連線區別聯絡

內連線,外連線實際上都是在笛卡爾積(join)的基礎上對記錄進行篩選。 等值連線和非等值連線:這兩者同時包含在內連線和外連線中,因為內連線和外連線都是需要連線條件的,條件為=則為等值連線,反之為非等值連線。 自然連線:等值連線的一種,使用natural join後面可以不

ActiveMQ中的訊息的持久化持久化 以及 持久訂閱者 持久訂閱者之間的區別與聯絡

①DeliveryMode 這是傳輸模式。ActiveMQ支援兩種傳輸模式:持久傳輸和非持久傳輸(persistent and non-persistent delivery),預設情況下使用的是持久傳輸。 可以通過MessageProducer類的 setDeliv

連線 右連結的區別,內連線連線的卻別!!

假設有A,B兩個表。   表A記錄如下:   aID     aNum   1     a20050111   2     a20050112   3     a20050113   4     a20050114   5     a20050115   表B記錄如下:  

Linux中軟連線硬連結的區別

什麼是連結? 連結簡單說實際上是一種檔案共享的方式,是 POSIX 中的概念,主流檔案系統都支援連結檔案。 它是用來幹什麼的? 你可以將連結簡單地理解為 Windows 中常見的快捷方式(或是 OS X 中的替身),Linux 中常用它來解決一些庫版本的問題,通常也

連線 右連結的區別,內連線連線區別

假設有A,B兩個表。  表A記錄如下:  aID     aNum  1     a20050111  2     a20050112  3     a20050113  4     a20050114  5     a20050115  表B記錄如下:  bID     b

詳解Linux系統中軟連線硬連結的區別與聯絡

Linux 系統中有軟連線和硬連結兩種特殊的“檔案”。 其中軟連線實際上可以看作是Windows中的快捷方式,而硬連結則可以看作類似於一個檔案的 “指標”(也不完全相同) 。 建立方法都很簡單: 1. 軟連線(符號連結) ln -s   source  target  2

sql左外連線右外連線區別

兩個表:A(id,name)資料:(1,張三)(2,李四)(3,王五)B(id,name)資料:(1,學生)(2,老師)(4,校長)左連線結果:select A.*,B.* from A left join B on A.id=B.id;1 張三 1 學生2 李四 2 老師

連線 ,右連線,內連線全外連線的4者區別

基本定義:   left join (左連線):返回包括左表中的所有記錄和右表中連線欄位相等的記錄。   right join (右連線):返回包括右表中的所有記錄和左表中連線欄位相等的記錄。   inner join (等值連線或者叫內連線):只返回兩個表中連線欄位相

linux 軟連線硬連結的區別

4點不同 : (1)軟連線可以 跨檔案系統 ,硬連線不可以 。實踐的方法就是用共享檔案把windows下的 aa.txt文字文件連線到linux下/root目錄 下 bb,cc . ln -s aa.txt /root/bb 連線成功 。ln aa.txt /root/bb

Http1.0、1.1、websocket在長連線互動方面的區別

網上內容很多了,有的也稱為webSocket、Ajax輪詢、長輪詢(long poll),要解決的應用問題主要是如何在客戶端上及時更新資料,如何讓服務端能主動向客戶端發出Request。至於說頻寬佔用、伺服器cpu佔用、socket控制代碼銷燬等,都屬於次帶帶出來的問題,而不

http】postget請求的區別

方式 無限制 信息 資源 敏感信息 字符 瀏覽器歷史記錄 指定 較差 兩種常用的HTTP請求方式:post和get get:從指定的資源進行請求。數據長度有限制(2048個字符)可被緩存、可被保留在瀏覽器歷史記錄中,安全性較差。發送敏感信息如密碼時不適用。 post

C# 面向對象3 靜態靜態的區別

一個 允許 如果 class 共享 靜態函數 區別 回收 body 靜態和非靜態的區別 1.在非靜態類中,既可以有實例成員(非靜態成員),也可以有靜態成員. 2.在調用實例成員的時候,需要使用對象名.實例成員; 在調用靜態成員的時候,需要使用類名.靜態成員名; 總結:

c#靜態方法靜態方法區別

特殊 靜態成員 pan 們的 gpo ase sna eth key c#靜態方法和非靜態方法區別 C#的類中可以包含兩種方法:C#靜態方法與非靜態方法。那麽他們的定義有什麽不同呢?他們在使用上會有什麽不同呢?讓我們來看看最直觀的差別:使用了static 修飾符的方法

同步異步以及阻塞阻塞的區別

結束 線程 同步異步 成功 -s 區別 狀態 得到 概念 一、同步與異步的區別: 同步:一個服務的完成需要依賴其他服務時,只有等待被依賴的服務完成後,才算完成,這是一種可靠的服務序列。要麽成功都成功,失敗都失敗,服務的狀態可以保持一致。 異步:一個服務的完成需要依賴其他

【轉】HTTP學習---TCPUDP協議的區別與應用

用戶數 prot 發送 smi 處理 層次 實時性 oot user 【原文】https://www.toutiao.com/i6592813624689951239/ 概述 ⊙TCP/IP是個協議組,可分為三個層次:網絡層、傳輸層和應用層。 在網絡層有IP協議、ICMP

HTTP PUT方法POST方法的區別

這兩個方法看起來都是講一個資源附加到伺服器端的請求,但其實是不一樣的。一些狹窄的意見認為,POST方法用來建立資源,而PUT方法則用來更新資源。這個說法本身沒有問題,但是並沒有從根本上解釋了二者的區別。事實上,它們最根本的區別就是:POST方法不是冪等的,而PUT方法則有冪等性。那這又衍生出

errorexception的區別,RuntimeExceptionRuntimeException的區別

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

【轉】mysql互動式連線&互動式連線

互動式操作:通俗的說,就是你在你的本機上開啟mysql的客戶端,就是那個黑視窗,在黑視窗下進行各種sql操作,當然走的肯定是tcp協議。 非互動式操作:就是你在你的專案中進行程式呼叫。比如一邊是tomcat web伺服器,一邊是資料庫伺服器,兩者怎麼通訊?在java web裡,我們通常會選擇hibernat