http大文件传输

news/2025/2/5 5:59:56/

随着科技的发展网络传输的资源越来越大,从几k到几M,几G。因此网络传输压力越来越大。

由此http有了解决,大文件传输的方法:

  1. 数据压缩传输,可以将大文件进行压缩传输通过Accept-Encoding和Content-Encoding指定压缩类型进行压缩传输。
  2. 分块传输:因为音频,视频都是经过高倍压缩,在压缩也起不到什么效果,因此有了分块传输,解决大文件传输。

分块传输因名而异,就是将大文件分成多分,一份份传输。

使用形式:在响应报文中用Transfer-Encoding:chunked 来表示:代表body的报文不是一次性发过来的,而是分成许多的块(chunk)逐个发送的。

因为分块发送body的长度是未知,的因此无法在头部指定Content-length长度,因此只能通过Chunked发送。

transfer-Encoding:Chunked和Content-length:两个字段互斥,所以无法同时出现。

分块传输流程:

  1. 每个分块包含两个部分,长度头和数据块;
  2. 长度头是以 CRLF(回车换行,即\r\n)结尾的一行明文,用 16 进制数字表示长度;
  3. 数据块紧跟在长度头后,最后也用 CRLF 结尾,但数据不包含 CRLF;
  4. 最后用一个长度为 0 的块表示结束,即“0\r\n\r\n”

范围请求:可以任意请求一个大文件之间的某段。()例如:看视频快进,就可以简单理解为范围请求传输。

范围请求条件:服务端必须返回Accept-Ranges:bytes 头,明确告诉客户端我支持范围请求。客户端在发送Range:bytes=x-y获取范围请求。

要注意 x、y 表示的是“偏移量”,范围必须从 0 计数,例如前 10 个字节表示为“0-9”,第二个 10 字节表示为“10-19”,而“0-10”实际上是前 11 个字节。

Range 的格式也很灵活,起点 x 和终点 y 可以省略,能够很方便地表示正数或者倒数的范围。假设文件是 100 个字节,那么:

  1. “0-”表示从文档起点到文档终点,相当于“0-99”,即整个文件;
  2. “10-”是从第 10 个字节开始到文档末尾,相当于“10-99”;
  3. “-1”是文档的最后一个字节,相当于“99-99”;
  4. “-10”是从文档末尾倒数 10 个字节,相当于“90-99”。

客户端发送了请求,服务端会对其进行验证,是否合法(例如:长度最大100,你请求200开始将会不合法)如果合法后服务器将会返回一个字段Content-Range:bytes x-y/length ,length代表总长度。

因此范围请求流程:

  1. 先发个 HEAD,看服务器是否支持范围请求,同时获取文件的大小;
  2. 开 N 个线程,每个线程使用 Range 字段划分出各自负责下载的片段,发请求传输数据;
  3. 下载意外中断也不怕,不必重头再来一遍,只要根据上次的下载记录,用 Range 请求剩下的那一部分就可以了。

 

注:一个请求连接一定对应一个响应结果。

分段传输服务端Transfer-Encoding:chunked,是分段传输,但是最终body体中接收的还是一个完整的数据。

范围请求:服务端确认Accept-Ranges: bytes 后在发送请求Range:x-y 服务端响应Content-Range:bytes x-y/length 是请求的这段内容,本身就是一个分段请求体。

 

 


http://www.ppmy.cn/news/508155.html

相关文章

android 拷贝大文件,不用数据线,手机和电脑互传大文件

原标题:不用数据线,手机和电脑互传大文件 目前国内市场主流的电脑系统有Windows和Mac os这两大阵营,手机系统有Android和IOS两种。但它们两两如何互相传送文件文件呢?今天我就和大家聊一聊这个。 1、普通文件的传送 一般来讲&…

大型文件传输,前后端分别怎么处理?

大型文件传输,前后端分别怎么处理? 但是针对大文件的上传,需要做额外的处理,否则可能会遇到如下问题: 1、文件过大,超出服务端的请求大小限制(如SpringMVC,默认文件上传最大1MB)。 2、请求的时间…

一个好用的大文件传输工具

网速这回事平时大家都不会怎么注意,会有这个意识的当然都经历过那些“难忘”的时刻: 几个G的文件下载了一宿,等第二天再看的时候,发现还有50%在缓慢地爬进度。跟客户传某个重要资料的时候,时而20KB时而100B&#xff0…

Netty 大文件传输

Netty 大文件传输 使用netty进行大文件传输,对文件大小没有限制实际上,传输的是文件分片,分片大小自定义整体思路 客户端一连上服务器,即发送指定文件的文件分片服务器收到分片后,写入指定路径,并向客户端…

Linux - 怎么实现大文件传输

一 前言 博文《PageCache》中介绍了 PageCache 的优缺点,其实在处理大文件中 PageCache 作用反而没有那么好。所以本文介绍 Linux 是怎么处理大文件的。 二 起因 首先看一下一个 read() 系统调用流程发生了什么,如下图: 当调用 read 方法时…

邮箱附件、QQ、微信等社交工具大文件传输解决方案

工具说明:适用于邮箱附件、QQ、微信、钉钉、网盘等场景的大文件分割存储和传输。 下载地址:https://download.csdn.net/download/hj960511/85012515 作者:任聪聪 很多时候在我们的日常办公中,会遇到各种类型的大文件,这…

大型文件传输慢、传输中断怎么办?

由于业务需要,如今,发送100M以上甚至是GB级大小的文件变得越来越普遍,比如设计稿件、软件开发包、视频素材等,一张图片2-3G、一本书稿4-5G、一个视频片段3-4G、一份设计图纸十几G……甚至还有上百G的大文件。 企业如何高效的管理和…

[srpingboot]学习-ReSTful

REST即表述性状态转移(英文:Representational State Transfer,简称REST),是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。它主要描述了资源的表述以及资源之间的…