HTTP 范圍Range請求

HTTP 的 Range 請求使客戶端能夠要求服務器僅向其回傳 HTTP 消息的一部分
HTTP 的 Range 請求頭是 HTTP/1.1 協議的一個特性。它允許客戶端請求僅傳輸資源的某個特定部分,而不是整個資源。

適用場景

  • 支持隨機訪問的媒體播放器
  • 明確只需大型文件某部分的數據處理工具
  • 允許用戶暫停及恢復下載的下載管理器

這對于需要只下載大文件中的一部分數據的應用場景非常有用

檢測服務端是否支持范圍請求

如果 HTTP 響應中存在 Accept-Ranges 標頭,并且其值不是“none”,那么該服務器支持范圍請求
通過使用像 cURL 這樣的工具發出一個 HEAD 請求來進行手動檢查

curl -I http://i.imgur.com/z4d4kWk.jpgHTTP/1.1 200 OK
... ...
Accept-Ranges: bytes
Content-Length: 146515

Accept-Ranges: bytes 表示可以使用字節作為單位來定義范圍
Content-Length 標頭也很有用,它指示要檢索的圖像的完整大小

如果網站省略了 Accept-Ranges 標頭,那么它們很可能不支持部分請求。
有些網站會包含這個標頭,但明確將其值設為“none”,以表明它們不支持這一特性:

curl -I https://www.youtube.com/watch?v=EwTZ2xpQwpA
HTTP
HTTP/1.1 200 OK
... ...
Accept-Ranges: none

下載管理器可能會禁用暫停按鈕

從服務器端請求特定的范圍

如果服務器支持范圍請求,只需在 HTTP 請求中包含 Range 標頭,指定希望服務器返回文檔的哪一部分或哪些部分

單一范圍

使用 cURL 來測試。這里的“-H”選項會向請求中添加一個標頭,即 Range 標頭,用于請求前 1024 個字節

curl http://i.imgur.com/z4d4kWk.jpg -i -H "Range: bytes=0-1023"GET /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
Range: bytes=0-1023

服務器將會返回 206 Partial Content 狀態

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024
... ...

Content-Range 響應標頭,表示此部分消息在完整資源中的位置
Content-Length 標頭,表示所請求范圍的大小(而非完整大小)

多重范圍

Range 標頭還允許在文檔中支持一次性獲取多重范圍。這些范圍使用逗號分隔

curl http://www.example.com -i -H "Range: bytes=0-50, 100-150"

服務器以 206 Partial Content 狀態碼以及 Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 標頭響應
表明隨后的數據將采用多部分字節范圍格式
每個部分都攜帶自己的 Content-Type 和 Content-Range 字段,而必須的 boundary 參數定義了用于分割每個消息體部分的邊界字符串
(邊界字符串…)

HTTP/1.1 206 Partial Content
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 282--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 0-50/1270<!DOCTYPE html>
<html lang="en-US">
<head><title>Example Do
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-150/1270eta http-equiv="Content-type" content="text/html; c
--3d6b6a416f9b5--

條件式范圍請求

當重新開始請求資源的更多部分時,需要保證存儲資源在收到上一個片段后未被修改

If-Range: Wed, 21 Oct 2015 07:28:00 GMT

If-Range HTTP 請求標頭使范圍請求具有條件性:

  • 如果條件兌現,則會發起范圍請求,服務器將以包含適當內容主體的 206 Partial Content 響應進行回復
  • 如果條件不兌現,會被發送完整的資源回來,并帶有 200 OK 狀態
    該標頭可與 Last-Modified 驗證器或 ETag 一起使用,但不能同時使用

范圍請求的響應

范圍請求相關的有三種狀態

  • 范圍請求成功后,服務器會發出 206 Partial Content 狀態
  • 如果不支持范圍請求,則返回 200 OK 狀態,并傳輸完整的響應體
  • 超出范圍的范圍請求將導致 416 Requested Range Not Satisfiable 狀態,這意味著沒有任何范圍值與資源的范圍重疊
    例如,每個范圍的第一個字節位置可能大于資源的長度

與分塊 Transfer-Encoding 的對比

Transfer-Encoding 標頭支持分塊編碼,這對于向客戶端發送大量數據特別有用,尤其是在完全處理請求之前,無法知道響應總大小的情況。服務器直接向客戶端發送數據,無需確定緩沖響應或確切長度,從而減少延遲提高響應速度

范圍請求和分塊傳輸是兼容的,可以獨立使用或結合使用

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

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

相關文章

2022 RoboCom 世界機器人開發者大賽-高職組(國賽):智能管家

人上了年紀&#xff0c;記性就會變差&#xff0c;時常不得不翻箱倒柜找東西。智能照護中心現在請你做一個簡單的智能管家程序&#xff0c;把老人家里的東西逐一編號&#xff0c;放進若干個收納箱里。當然收納箱也是有編號的&#xff0c;你的程序要記錄下哪個東西放在哪個收納箱…

R包: phyloseq擴增子統計分析利器

介紹 phyloseq包對多類型數據的綜合軟件&#xff0c;并其對這些數據提供統計分析和可視化方法。 微生物數據分析的主要挑戰之一是如何整合不同類型的數據&#xff0c;從而對其進行生態學、遺傳學、系統發育學、多元統計、可視化和檢驗等分析。同時&#xff0c;由于同行之間需要…

QT學習日記一

創建QT文件步驟 這是創建之后widget.cpp和widget.h文件的具體代碼解釋&#xff0c;也是主要操作的文件&#xff0c;其中main.cpp不用操作&#xff0c;ui則是圖形化操作界面&#xff0c;綜合使用時&#xff0c;添加一個元件要注意重編名和編譯一下&#xff0c;才能在widget這類…

生產者消費者模型和線程同步問題

文章目錄 線程同步概念生產者消費者模型條件變量使用條件變量喚醒條件變量 阻塞隊列 線程同步概念 互斥能保證安全,但是僅有安全不夠,同步可以更高效的使用資源 生產者消費者模型 下面就基于生產者消費者來深入線程同步等概念: 如何理解生產消費者模型: 以函數調用為例: 兩…

[高頻 SQL 50 題(基礎版)]第一千七百五十七題,可回收且低脂產品

題目&#xff1a; 表&#xff1a;Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | low_fats | enum | | recyclable | enum | ---------------------- product_id 是該表的主鍵&#xff08;具有唯…

SQLite 命令行客戶端 + HTA 實現簡易UI

SQLite 命令行客戶端 HTA 實現簡易UI SQLite 客戶端.hta目錄結構參考資料 僅用于探索可行性&#xff0c;就只實現了 SELECT。 SQLite 客戶端.hta <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; cha…

C語言 | Leetcode C語言題解之第226題翻轉二叉樹

題目&#xff1a; 題解&#xff1a; struct TreeNode* invertTree(struct TreeNode* root) {if (root NULL) {return NULL;}struct TreeNode* left invertTree(root->left);struct TreeNode* right invertTree(root->right);root->left right;root->right le…

LeetCode加油站(貪心算法/暴力,分析其時間和空間復雜度)

題目描述 一.原本暴力算法 最初的想法是&#xff1a;先比較gas數組和cost數組的大小&#xff0c;找到可以作為起始點的站點(因為如果你起始點的油還不能到達下一個站點&#xff0c;就不能作為起始點)。當找到過后&#xff0c;再去依次順序跑一圈&#xff0c;如果剩余的油為負數…

從數據倉庫到數據湖(下):熱門的數據湖開源框架

文章目錄 一、前言二、Delta Lake三、Apache Hudi四、Apache Iceberg五、Apache Paimon六、對比七、筆者觀點八、總結八、參考資料 一、前言 在上一篇從數據倉庫到數據湖(上)&#xff1a;數據湖導論文章中&#xff0c;我們簡單講述了數據湖的起源、使用原因及其本質。本篇文章…

Rust入門實戰 編寫Minecraft啟動器#4下載資源

首發于Enaium的個人博客 首先我們需要添加幾個依賴。 model { path "../model" } parse { path "../parse" } reqwest { version "0.12", features ["blocking", "json"] } file-hashing { version "0.1&quo…

Xshell 和寶塔有啥區別

Xshell 和寶塔是兩種不同類型的工具&#xff0c;具有以下顯著區別&#xff1a; 1. 功能和用途 Xshell&#xff1a;主要是一款用于遠程連接服務器的終端模擬軟件。它允許用戶通過 SSH 協議安全地連接到遠程服務器&#xff0c;并在終端中執行命令&#xff0c;進行服務器的管理和…

AI論文作圖——如何表示模型參數凍結狀態

一、LOGO &#x1f525; win10win11 ?? win10win11 二、注意事項&#xff1a; 根據電腦系統&#xff0c;選擇對應的版本。 參考&#xff1a; 【AI論文作圖】如何表示模型參數凍結狀態&#xff1f;

對稱加密和非對稱加密解析

目錄 一、對稱加密二、非對稱加密三、總結 對稱加密和非對稱加密是兩種主要的加密技術&#xff0c;它們在數據安全領域扮演著重要角色。 一、對稱加密 基本原理&#xff1a;對稱加密使用同一個密鑰進行加密和解密。這意味著如果A用某個密鑰加密了信息發送給B&#xff0c;那么B…

Redis數據庫筆記

一、 認識NoSQL SQLNoSQL數據結構結構化非結構化(鍵值類型(Redis)文檔類型(MongoDB)列類型(HBase)Graph類型(Neo4j))數據關聯關聯的無關聯查詢方式SQL查詢非SQL事務特性ACIDBASE存儲方式磁盤內存擴展性垂直水平使用場景數據結構固定;相關業務對數據安全性、一致性要…

【C++中resize和reserve的區別】

1. resize的用法 改變當前容器內含有元素的數量&#xff08;size()&#xff09;比如&#xff1a; vector<int> vct;int num vct.size();//之前的元素個數為num vct.resize(len);//現在的元素個數為len如果num < len &#xff0c;那么容器vct新增len - num個元素&am…

8-選擇靜態或共享庫

在本節中&#xff0c;我們將展示如何使用BUILD_SHARED_LIBS變量來控制add_library()的默認行為&#xff0c;并允許控制如何構建沒有顯式類型的庫(STATIC、SHARED、MODULE或OBJECT)。 要做到這一點&#xff0c;我們需要將BUILD_SHARED_LIBS添加到頂級的CMakeLists.txt中。我…

神經網絡中的激活函數

目錄 一、什么是激活函數&#xff1a;二、如何選擇激活函數&#xff1a;1.Sigmoid激活函數&#xff1a;2.線性激活函數&#xff1a;3.ReLU激活函數&#xff1a; 一、什么是激活函數&#xff1a; 激活函數是神經網絡中的一種函數&#xff0c;它在神經元中起到了非線性映射的作用…

最新 Kubernetes 集群部署 + flannel 網絡插件(保姆級教程,最新 K8S 版本)

資源列表 操作系統配置主機名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

gitee上傳和下載idea項目的流程

環境&#xff1a;idea2022 一、上傳項目 1、在gitee中新建一個倉庫。 2、打開所要上傳的項目的文件夾&#xff0c;點擊Git Bash&#xff0c;生成.git文件夾。 3、在idea中打開所要上傳的項目&#xff0c;在控制臺的Terminal菜單中&#xff0c;輸入git add . (注意&#xf…

安防綜合管理/視頻匯聚平臺EasyCVR視頻監控存儲技術:高效穩定的視頻數據保障方案

隨著科技的飛速發展&#xff0c;視頻監控已成為現代社會不可或缺的一部分。無論是城市治安、交通管理&#xff0c;還是商業安保、家庭監控&#xff0c;視頻監控都發揮著至關重要的作用。而在這背后&#xff0c;視頻監控存儲技術則是確保監控數據得以長期保存、高效檢索和可靠利…