Я проводил этот тест на своем веб-сайте уже несколько дней, и он все еще сбивает меня с толку.
У меня есть zip-файл на моем сервере. Внутри zip-файла находится один текстовый файл, содержащий фразу «это тест».
В моем файле api.php у меня есть следующий код:
<?php
$originalFileName = "test.zip";
header("content-encoding: none");
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=\"" . "test.zip" . "\"");
header("Content-Length: " . filesize($originalFileName));
readfile($originalFileName);
?>
Когда я захожу в файл api.php в Firefox. Он предлагает скачать «test.zip» с размером файла 128 байт.
Когда я нажимаю сохранить. Он создает файл на моем рабочем столе, но он имеет размер 0 байт и является пустым.
Если я захожу на URL, используя прямой IP-адрес, т.е. http://192.0.0.1/api.php
Он загружает zip-файл и содержит текстовый файл в предположении.
Домен находится под облачным отблеском с отключенным кэшированием и включенным режимом разработчика, поэтому он не должен быть таким особенным.
Я использовал инструменты разработчика Firefox для копирования ответов от запроса домена и запроса ip
Запрос домена - Это делает 0-байтовый пустой почтовый файл
HTTP/1.1 200 OK
Date: Sat, 01 Jun 2019 10:15:22 GMT
content-disposition: attachment; filename="test.zip"
Content-Length: 128
Content-Type: application/zip
content-encoding: none
Connection: keep-alive
X-Powered-By: PHP/7.2.16
Vary: User-Agent
Alt-Svc: h2=":443"; ma=60
CF-RAY: 4e006d0d4e615629-ORD
Server: cloudflare
UEsDBBQAAAAAADEcwU7q5x4NDgAAAA4AAAAIAAAAdGVzdC50eHR0aGlzIGlzIGEgdGVzdFBLAQIUABQAAAAAADEcwU7q5x4NDgAAAA4AAAAIAAAAAAAAAAEAIAAAAAAAAAB0ZXN0LnR4dFBLBQYAAAAAAQABADYAAAA0AAAAAAA=
Прямой IP-запрос - это делает zip-файл размером 128 байт
HTTP/1.1 200 OK
Date: Sat, 01 Jun 2019 10:15:57 GMT
content-disposition: attachment; filename="test.zip"
content-length: 128
Content-Type: application/zip
content-encoding: none
Connection: Upgrade, Keep-Alive
X-Powered-By: PHP/7.2.16
Upgrade: h2,h2c
Vary: User-Agent
Keep-Alive: timeout=5
Server: Apache
UEsDBBQAAAAAADEcwU7q5x4NDgAAAA4AAAAIAAAAdGVzdC50eHR0aGlzIGlzIGEgdGVzdFBLAQIUABQAAAAAADEcwU7q5x4NDgAAAA4AAAAIAAAAAAAAAAEAIAAAAAAAAAB0ZXN0LnR4dFBLBQYAAAAAAQABADYAAAA0AAAAAAA=
Обе полезные нагрузки ответов идентичны, кроме нескольких мелких изменений в заголовках ответов.
Такие как регистр букв и заголовки cloudflare.
Я не вижу причин, по которым размер zip-файла должен составлять 0 байт при попытке сохранить приглашение на загрузку через домен.
Когда я нажимаю Ctrl + J, чтобы просмотреть историю загрузок.
Это выглядит хорошо для прямой загрузки ip внизу и странного сообщения для верхнего домена.
У кого-нибудь есть предложения, как решить эту проблему?