我正在尝试配置 Apache 2.4.25(Debian 9.7)服务器以通过 HTTP/2 提供文件。
所有 HTML、CSS、JS 和图像文件均已正确提供。
但是,我在处理较大的文件时遇到了困难,例如 58 MB (60639199 b) 的 ZIP 文件:
https://www.scan2docx.com/img/document_scanner_samples.zip
通过 HTTP/1.1 下载此文件完全符合预期。以下是 Apache 访问日志的摘录:
x.x.x.x - - [08/Feb/2019:08:11:05 +0100] "GET /img/document_scanner_samples.zip HTTP/1.1" 200 60752807 "-" "Wget/1.18 (linux-gnu)"
但是,通过 HTTP/2 下载时,Chrome 中返回以下错误:
Failed - network error
在 FireFox 中:
Failed
以下是 Apache 访问日志的摘录:
x.x.x.x - - [08/Feb/2019:08:02:08 +0100] "GET /img/document_scanner_samples.zip HTTP/2.0" 200 60639199 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"
Apache 错误日志不包含大约同一时间的任何信息。
通过多次单击 Web 浏览器中的“恢复”按钮,最终可以下载全部 58 MB 的 ZIP 文件。
每次点击“恢复”时,似乎都会以接近 6 MB 的块下载 ZIP 文件。以下是 Chrome 中的文件大小:
"Unconfirmed 149963.crdownload" 6282112 b
"Unconfirmed 867419.crdownload" 12564224 b
"Unconfirmed 121076.crdownload" 18846336 b
"Unconfirmed 499937.crdownload" 25128448 b
"Unconfirmed 249798.crdownload" 31410560 b
"Unconfirmed 631305.crdownload" 37692672 b
"Unconfirmed 871992.crdownload" 43974784 b
有人能解释一下这里发生了什么吗?
并就如何解决问题提出一些建议?
更新:使用 curl 7.64.0 测试结果。
使用支持 HTTP2 的 curl,我可以通过 HTTP/1.1 和 HTTP2 正确下载 ZIP 文件。
我使用了以下命令:
/usr/local/bin/curl -vs --http1.1 -o via_http_1_1.zip https://www.scan2docx.com/img/document_scanner_samples.zip &> /dev/stdout | tee -a via_http_1_1.txt
/usr/local/bin/curl -vs --http2 -o via_http_2.zip https://www.scan2docx.com/img/document_scanner_samples.zip &> /dev/stdout | tee -a via_http_2.txt
Apache access.log 中的条目如下:
x.x.x.x - - [08/Feb/2019:12:37:24 +0100] "GET /img/document_scanner_samples.zip HTTP/1.1" 200 60752588 "-" "curl/7.64.0"
x.x.x.x - - [08/Feb/2019:12:37:37 +0100] "GET /img/document_scanner_samples.zip HTTP/2.0" 200 60639199 "-" "curl/7.64.0"
下载的ZIP文件如下:
-rw-r--r-- 1 x x 60639199 Feb 8 12:37 via_http_1_1.zip
-rw-r--r-- 1 x x 60639199 Feb 8 12:37 via_http_2.zip
HTTP/1.1 日志文件: https://www.scan2docx.com/img/via_http_1_1.txt
HTTP/2 日志文件: https://www.scan2docx.com/img/via_http_2.txt
然而,在网络浏览器和所有操作系统中,下载仍然失败。
是什么赋予了?