Cannot download differentially, fallback to full download: Error: Server doesn't support Accept-Ranges (response code 200)
解决方案
修改nginx配置文件支持Accept-Ranges(范围请求)
server
{
...
location ^~/ {
default_type multipart/byteranges;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS,PUT';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
# 支持范围请求
add_header Accept-Ranges bytes;
proxy_pass http://127.0.0.1:5000/;
proxy_set_header x-forwarded-for $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
分段请求和差异更新
useMultipleRangeRequest(分段请求)
useMultipleRangeRequest 是 Electron 更新机制中的一个配置选项,用于控制是否启用多段请求(Multiple Range Requests)来下载更新内容。
-
当启用时,更新程序会通过多个分段请求(Range: bytes=x-y)来下载更新内容,而不是一次性下载整个文件。这种方式可以提高下载效率,尤其是在网络不稳定或文件较大的情况下。
-
如果服务器不支持多段请求(例如某些服务不支持 Content-Type: multipart/byteranges),则需要禁用此选项。
differentialPackage(差异更新)
differentialPackage 是 Electron 构建工具(如 electron-builder)中的一个配置选项,用于启用差异更新(Differential Updates)。
-
差异更新通过对比新旧版本的文件内容,只下载发生变化的部分,从而减少更新包的大小和下载时间。
-
这种方式通常通过 blockmap 文件实现,blockmap 文件记录了文件的分块信息(如哈希值和大小),用于确定需要下载的更新内容。
配置示例:
修改main.js文件:
autoUpdater.useMultipleRangeRequest = false;
autoUpdater.differentialPackage = false;
修改package.json:
{
"publish": [
{
"provider": "generic",
"url": "http://127.0.0.1:5000/updates",
"useMultipleRangeRequest": false
}
],
"nsis": {
"differentialPackage": false
}
}