判断Http服务器是否支持断点续传

Http服务器有很多,比如,比较著名的有Apache、Nginx等,Apache会默认开启对断点续传的支持。因此,如果直接通过Web服务器来提供文件的下载,可以不必做特别的配置,即可享受到断点续传的好处。

断点续传是在发起HTTP请求的时候加入RANGE头来告诉服务器客户端已经下载了多少字节。等所有这些请求都返回之后,再把得到的内容一块一块的拼接起来得到完整的资源。简单来说,判断服务器是否支持断点续传,看Web服务器是否支持Range请求即可

curl -i --range 0-9 https://image.jianke.com/upload/prodimage/201712wm/201712495031691.jpg
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10 100 10 0 0 1 0 0:00:03 0:00:03 --:--:-- 322HTTP/1.1 206 Partial Content
Server: nginx
Date: Mon, 16 Sep 2019 06:28:11 GMT
Content-Type: application/octet-stream
Content-Length: 1001
Last-Modified: Wed, 31 Jul 2019 04:42:36 GMT
Connection: keep-alive
ETag: "5d411c3c-a78d40f"
Content-Range: bytes 0-1000/175690767

若能够找到 Content-Range,则表明服务器支持断点续传。有些服务器还会返回 Accept-Ranges,输出结果 Accept-Ranges: bytes ,说明服务器支持按字节下载。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QNetworkAccessManager是Qt网络模块提供的类,用于网络资源的请求和响应。但是QNetworkAccessManager本身并不支持断点续传,需要开发者自行实现。 实现断点续传的一种常见方法是使用HTTP协议的Range头字段,该字段用于指定请求的字节范围。具体的实现步骤如下: 1. 首先,开发者需要在请求时添加Range头字段,以指定请求的起始位置。可以通过设置QNetworkRequest对象的setRawHeader方法来设置Range字段。 2. 当接收到响应时,可以通过QNetworkReply的rawHeader方法获取到响应头信息,如果响应头中包含Accept-Ranges字段,则表示该资源支持断点续传。 3. 如果资源支持断点续传,那么可以通过QNetworkReply的bytesAvailable方法获取到已下载的字节数,然后再次发起请求时,设置Range字段的起始位置为已下载的字节数,即可实现断点续传。 4. 在每次接收到数据时,开发者需要将已接收的数据追加到之前已下载的数据之后,以确保所有数据完整。 需要注意的是,实现断点续传对于服务器端和客户端都要支持,只有当服务器支持Range头字段,且资源能够被分割成多个部分时,才能实现断点续传。 总结起来,通过在请求中设置Range头字段,结合服务器端的支持,可以实现QNetworkAccessManager的断点续传功能。开发者可以根据具体的需求和场景,自行实现相应的断点续传逻辑。 ### 回答2: QNetworkAccessManager在网络编程中是一个重要的类,通过它我们可以方便地进行网络请求和数据交互。而断点续传是一种网络传输的机制,在文件下载中特别常见。 断点续传是指在进行文件下载时,如果下载过程中突然中断了,可以通过断点续传的机制,在中断处继续下载,而不是重新开始。这样可以节省时间和流量,提高下载效率。 在QNetworkAccessManager中实现断点续传的方法如下: 1. 首先,通过发送HTTP请求从服务器获取文件的大小和上次下载的位置。 2. 然后,使用QFile类创建一个本地文件,并移动到上次下载的位置。 3. 接下来,设置HTTP请求的Range头部,指定从上次下载的位置开始下载。 4. 在网络请求完成后,将接收到的数据写入本地文件。 5. 最后,更新文件的下载进度,并在下载完成后关闭文件。 通过以上步骤,我们可以实现断点续传功能。如果在下载过程中突然中断,下次再次下载时,只需要获取上次中断的位置并设置Range头部,就可以继续下载未完成的部分,提高了下载的效率。 总之,QNetworkAccessManager是一个强大的网络编程工具,通过合理地使用它的功能,我们可以轻松实现文件的断点续传。 ### 回答3: QNetworkAccessManager是Qt提供的网络访问类,它可以用于实现网络文件的下载和上传等功能。而断点续传指的是当文件传输中断后,能够从中断的位置继续传输,而不需要重新下载或上传整个文件。 QNetworkAccessManager本身并没有提供直接的断点续传功能,但可以通过下面的步骤实现: 1.在每次开始下载或上传前,先检查目标文件是否已经存在,并记录已经下载或上传的文件大小。 2.通过设置"Range"请求头信息来指定下载或上传的起始位置,以及结束位置。 3.在接收到服务器响应时,判断是否返回了"206 Partial Content"状态码,表示支持断点续传。如果返回了该状态码,就可以从响应的Content-Range头部获取已经下载或上传的字节数,并将其加上之前记录的字节数,即可计算出从哪个位置开始继续传输。 4.根据上述计算,设置新的"Range"请求头信息,继续发送请求。 5.接着继续下载或上传数据,直到完成。 通过上述逻辑,我们可以实现在网络传输中断后,能够从断点处继续传输的功能。同时,我们还可以根据具体需求,加入一些错误处理和进度条显示等功能,以提升用户体验。 总之,利用QNetworkAccessManager的网络请求、响应和数据读取等功能,结合HTTP协议中的"Range"请求头信息,我们可以实现断点续传功能,提高网络传输的效率和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值