增加Range请求的支持
为什么需要支持 Range
请求?
当客户端(如浏览器或App)播放视频时,通常不会一次性加载完整内容,而是使用 HTTP Range 请求 来按需请求部分字节(如前几秒),从而支持:
- 快速启动(只加载开头几字节)
- 拖动进度条时按位置请求
- 网络不佳时逐段加载
- 实现断点续传和边下边播
如果服务器或代理(如 Nginx)不正确支持 Range
,客户端将收到 200 OK
而不是 206 Partial Content
,导致播放器无法播放或无法拖动。
🛠 Nginx 反向代理时如何正确支持 Range
请求?
当使用 Nginx 作为反向代理时,为了确保客户端能正常播放视频流,需要在配置文件中添加以下设置:
location / {
proxy_pass http://backend_server;
# 增加的配置 - 开始
proxy_set_header Range $http_range;
proxy_pass_request_headers on;
proxy_buffering off;
# 增加的配置 - 结束
# 其他配置无需修改
...
}
✅ 检查是否生效
你可以使用命令测试是否正确返回 206 Partial Content
:
curl -I -H "Range: bytes=0-1" http://your-domain/icon-folder.png
返回应包含:
HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1/12345678
Accept-Ranges: bytes
💡 总结
只要确保:
- 客户端发送的
Range
请求头被转发到MT Photos服务端 - Nginx 不做缓存、不压缩、不隐藏响应头
就可以正常支持断点播放、快进快退和视频预加载。