LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

通過HTTP發(fā)送大量數(shù)據(jù)的三種方法

admin
2023年10月16日 9:30 本文熱度 658

在網(wǎng)絡(luò)的早期時期,人們發(fā)送的文件大小僅為幾KB。到了2023年,我們享受著高分辨率的MB級別圖像,并在幾GB的4K(即將是8K)視頻中觀看。

即使有良好的互聯(lián)網(wǎng)連接,下載一個5GB的文件仍然需要一些時間。如果你擁有Xbox或PlayStation,你就知道這種感覺。

我們有三種方法可以通過HTTP縮短發(fā)送大量數(shù)據(jù)的時間:

壓縮數(shù)據(jù)發(fā)送分塊數(shù)據(jù)請求選擇范圍內(nèi)的數(shù)據(jù)

它們并不是互斥的。你可以根據(jù)用例一起使用所有方法。

壓縮數(shù)據(jù)


要壓縮數(shù)據(jù),我們需要壓縮算法。

在發(fā)送請求時,瀏覽器會包含一個名為Accept-Encoding的頭,其中包含支持的壓縮算法列表,包括gzip(GZIP)、compressdeflatebr(Brotli)。

接下來,服務(wù)器從列表中選擇其支持的算法,并在Content-Encoding頭中設(shè)置算法名稱。

當(dāng)瀏覽器接收到響應(yīng)時,它知道如何解析正文中的數(shù)據(jù)。

在這些算法中,最流行的是GZIP。它是壓縮文本數(shù)據(jù)(如HTML、CSS和Javascript)的絕佳選擇。

Brotli是另一個值得一提的算法。它在壓縮HTML方面的性能甚至比GZIP更好。

這些高效的算法有一些限制。

它們對文本的壓縮效果很好,但對于壓縮圖像或視頻來說則不足夠。畢竟,媒體已經(jīng)過了優(yōu)化。

試著在你的計算機上壓縮一個視頻文件。在壓縮之前和之后,你幾乎看不到太大的區(qū)別。

此外,幾乎不可能將一個5GB的視頻壓縮到幾KB而不損失質(zhì)量。

壓縮是好的,但我們需要一個更好的解決方案——將文件分塊發(fā)送并在客戶端組裝部分?jǐn)?shù)據(jù)。

發(fā)送分塊數(shù)據(jù)


在版本1.1中,HTTP引入了分塊數(shù)據(jù)以處理大數(shù)據(jù)情況。

在發(fā)送響應(yīng)時,服務(wù)器添加一個頭Transfer-Encoding: chunked,讓瀏覽器知道數(shù)據(jù)是分塊傳輸?shù)摹?/p>


每個分塊數(shù)據(jù)都有以下組件:

一個長度塊標(biāo)記,標(biāo)記當(dāng)前分塊數(shù)據(jù)的長度分塊數(shù)據(jù)塊在每個塊的末尾的CRLF分隔符

想知道CRLF是什么嗎?


CR緊接著LF(CRLF,\r\n,或0x0D0A)將光標(biāo)移動到下一行,然后移到行的開頭。 在本文末尾的進(jìn)一步閱讀部分,你可以找到更多詳細(xì)信息。在這里,你可以簡單地將其視為一個分隔符。

服務(wù)器繼續(xù)向瀏覽器流式傳輸分塊數(shù)據(jù)。當(dāng)達(dá)到數(shù)據(jù)流的末尾時,它附加一個包含以下部分的結(jié)束標(biāo)記:

一個長度塊,數(shù)字為0,末尾為CRLF一個額外的CRLF

在瀏覽器端,它等待所有數(shù)據(jù)塊,直到達(dá)到結(jié)束標(biāo)記。然后,它移除分塊編碼,包括CRLF和長度信息。

接下來,它將分塊數(shù)據(jù)組合成一個整體。因此,在Chrome DevTools上,你只能看到組裝后的數(shù)據(jù),而不是分塊數(shù)據(jù)。

最終,你會收到整個數(shù)據(jù)的一塊。


分塊數(shù)據(jù)是有用的。然而,對于一個5GB的視頻,完整的數(shù)據(jù)仍然需要一些時間才能到達(dá)。

我們能不能獲取數(shù)據(jù)的選定塊,并在需要時請求其他塊呢?

HTTP說可以。

在選定范圍內(nèi)請求數(shù)據(jù)


在YouTube上打開一個視頻,你會看到一個灰色的進(jìn)度條正在向前移動。

你剛剛看到的是YouTube在請求選定范圍內(nèi)的數(shù)據(jù)。

此功能使你可以在時間軸的任何地方跳躍。當(dāng)點擊進(jìn)度條上的某個位置時,瀏覽器會請求視頻數(shù)據(jù)的特定范圍。

在服務(wù)器上實現(xiàn)范圍請求是可選的。如果實現(xiàn)了,你可以在響應(yīng)頭中看到Accept-Ranges: bytes


這是一個YouTube請求的示例。在任何“playback”請求中,你都可以找到這個頭。

范圍請求頭看起來像`Range:

bytes=0-80`,它是從0開始的索引。

這個頭是一個設(shè)計非常巧妙且具有出色靈活性的頭。

假設(shè)一個數(shù)據(jù)總共有100個字節(jié)。

Range: bytes=20請求從20開始到末尾的范圍,等于Range: bytes=20-99Range: bytes=-20請求數(shù)據(jù)的最后20個字節(jié),等于Range: bytes=80-99

如果請求的范圍有效,服務(wù)器將發(fā)送帶有Content-Range頭的響應(yīng),驗證數(shù)據(jù)范圍和總長度,例如Content-Range: bytes 70-80/100

范圍請求廣泛用于視頻流媒體和文件下載服務(wù)。

你有沒有在互聯(lián)網(wǎng)中斷后繼續(xù)文件下載?那就是范圍請求。

此外,范圍請求支持多個范圍。

例如,你可以從文件中請求兩個范圍,如Range: bytes=20-45, 70-80

多范圍體看起來類似于分塊數(shù)據(jù)。每個數(shù)據(jù)塊都有以下部分:

一個邊界塊,標(biāo)識不同數(shù)據(jù)塊的邊界,以--開始,以CRLF結(jié)束兩個頭,Content-TypeContent-Range,顯示相應(yīng)數(shù)據(jù)塊的屬性,以CRLF結(jié)束一個額外的CRLF,告訴客戶端真正的數(shù)據(jù)即將到來最后,以CRLF結(jié)束的數(shù)據(jù)塊

邊界僅僅是一個看起來像3d6b6a416f9b5的隨機字符串,標(biāo)記不同數(shù)據(jù)塊的邊界。

最終,體結(jié)束于邊界塊,以--開始,以--和CRLF結(jié)束。這個部分告訴瀏覽器多部分已經(jīng)結(jié)束。

讓我們把它全部整合起來。響應(yīng)體的結(jié)構(gòu)如下所示。

 

總結(jié)

HTTP幫助我們通過壓縮、分塊數(shù)據(jù)和范圍數(shù)據(jù)傳送大量數(shù)據(jù)。

這里的思想是在需要的時候傳送我們需要的數(shù)據(jù),然后在需要時發(fā)送其他數(shù)據(jù)。當(dāng)在設(shè)計類似系統(tǒng)時遇到問題時,你可以嘗試相同的思路。

通過結(jié)合這三種方法,我們可以發(fā)送壓縮的分塊數(shù)據(jù)范圍數(shù)據(jù)。


該文章在 2023/10/16 9:30:14 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲性69影院在线观看 | 亚洲片在线观看天堂 | 亚洲s图欧美中文字幕 | 最新亚洲人成在线观看 | 中文亚洲无线码字幕乱码 | 一级成年人电影在线观看 |