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.mzph.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;视频监控存储技术则是确保监控数据得以长期保存、高效检索和可靠利…