中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HTTP持久連接的方法

發布時間:2021-07-02 17:38:47 來源:億速云 閱讀:443 作者:chen 欄目:大數據

本篇內容主要講解“HTTP持久連接的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“HTTP持久連接的方法”吧!

我們知道HTTP協議采用“請求-應答”模式,當使用普通模式,即非Keep-Alive模式時,每個請求/應答客戶和服務器都要新建一個連接,完成之后立即斷開連接(HTTP協議為無連接的協議);當使用Keep-Alive模式(又稱持久連接、連接重用)時,Keep-Alive功能使客戶端到服務器端的連接持續有效,當出現對服務器的后繼請求時,Keep-Alive功能避免了建立或者重新建立連接。
在HTTP1.0版本中,并沒有官方的標準來規定Keep-Alive如何工作,因此實際上它是被附加到HTTP1.0協議上,如果客戶端瀏覽器支持Keep-Alive,那么就在HTTP請求頭中添加一個字段Connection:Keep-Alive,當服務器收到附帶有Connection:Keep-Alive的請求時,它也會在響應頭中添加一個同樣的字段來使用Keep-Alive。這樣一來,客戶端和服務器之間的HTTP連接就會被保持,不會斷開(超過Keep-Alive規定的時間,意外斷電等情況除外),當客戶端發送另外一個請求時,就使用這條已經建立的連接。
在HTTP1.1版本中,默認情況下所有連接都被保持,如果加入"Connection:close"才關閉。目前大部分瀏覽器都使用HTTP1.1協議,也就是說默認都會發起Keep-Alive的連接請求了,所以是否能完成一個完整的Keep-Alive連接就看服務器設置情況。
由于HTTP1.0沒有官方的Keep-Alive規范,并且也已經基本被淘汰,以下討論均是針對HTTP1.1標準中的Keep-Alive展開的。
注意:
HTTPKeep-Alive簡單說就是保持當前的TCP連接,避免了重新建立連接。
HTTP長連接不可能一直保持,例如Keep-Alive:timeout=5,max=100,表示這個TCP通道可以保持5秒,max=100,表示這個長連接最多接收100次請求就斷開。
HTTP是一個無狀態協議,這意味著每個請求都是獨立的Keep-Alive沒能改變這個結果。另外,Keep-Alive也不能保證客戶端和服務器之間的連接一定是活躍的,在HTTP1.1版本中也如此。唯一能保證的就是當連接被關閉時你能得到一個通知,所以不應該讓程序依賴于Keep-Alive的保持連接特性,否則會有意想不到的后果。
使用持久連接之后,客戶端、服務端怎么知道本次傳輸結束呢?兩部分:1.判斷傳輸數據是否達到了Content-Length指示的大小;2.動態生成的文件沒有Content-Length,它是分塊傳輸(chunked),這時候就要根據chunked編碼來判斷,chunked編碼的數據在最后有一個空chunked塊,表明本次傳輸數據結束,詳見這里。什么是chunked分塊傳輸呢?下面我們就來介紹一下。

Transfer-Encoding是一個用來標示HTTP報文傳輸格式的頭部值。盡管這個取值理論上可以有很多,但是當前的HTTP規范里實際上只定義了一種傳輸取值——chunked。
如果一個HTTP消息(請求消息或應答消息)的Transfer-Encoding消息頭的值為chunked,那么,消息體由數量未定的塊組成,并以最后一個大小為0的塊為結束。
每一個非空的塊都以該塊包含數據的字節數(字節數以十六進制表示)開始,跟隨一個CRLF(回車及換行),然后是數據本身,最后塊CRLF結束。在一些實現中,塊大小和CRLF之間填充有白空格(0x20)。
最后一塊是單行,由塊大小(0),一些可選的填充白空格,以及CRLF。最后一塊不再包含任何數據,但是可以發送可選的尾部,包括消息頭字段。消息最后以CRLF結尾。
一個示例響應如下:

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

25
This is the data in the first chunk

1A
and this is the second one
0

注意:
chunked和multipart兩個名詞在意義上有類似的地方,不過在HTTP協議當中這兩個概念則不是一個類別的。multipart是一種Content-Type,標示HTTP報文內容的類型,而chunked是一種傳輸格式,標示報頭將以何種方式進行傳輸。
chunked傳輸不能事先知道內容的長度,只能靠最后的空chunk塊來判斷,因此對于下載請求來說,是沒有辦法實現進度的。在瀏覽器和下載工具中,偶爾我們也會看到有些文件是看不到下載進度的,即采用chunked方式進行下載。
chunked的優勢在于,服務器端可以邊生成內容邊發送,無需事先生成全部的內容。HTTP/2不支持Transfer-Encoding:chunked,因為HTTP/2有自己的streaming傳輸方式(Source:MDN-Transfer-Encoding)。

到此,相信大家對“HTTP持久連接的方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

日照市| 上犹县| 瑞昌市| 明溪县| 仙桃市| 扶风县| 桂平市| 自贡市| 庐江县| 乌苏市| 嘉黎县| 九台市| 施秉县| 泗阳县| 绩溪县| 承德县| 大悟县| 唐山市| 兴安盟| 舞阳县| 营山县| 永德县| 天津市| 龙口市| 云浮市| 盐津县| 青川县| 宾阳县| 维西| 彭水| 仁布县| 个旧市| 黑水县| 常宁市| 芜湖县| 宁化县| 平遥县| 清镇市| 读书| 义马市| 若羌县|