PDF-файл поврежден / проблемы с HTTP-заголовком

0

У меня есть некоторый код устаревшего кода в одном из приложений, который используется для загрузки файлов PDF (размер файла PDF составляет около 350-400 КБ), и в последнее время мы жаловались (около 1% клиентов) на то, что загрузка PDF не работает с поврежденными/поврежденными файловыми ошибками.

Ниже приведен фрагмент кода (C++ приложение) для загрузки

String header;
header.append("Content-type: application/force-download\r\n");
header.append("Content-Transfer-Encoding: Binary\r\n");
header.append("Content-length: %d\r\n", filebuf.length());
header.append("Connection: Close\r\n");
header.append("Content-disposition: attachment; filename=%s\r\n\r\n", filename_to_download.chars());

Класс String и метод append - это просто пример.

Я понимаю, что выше заголовки не лучший способ запуска загрузки файла PDF (я упростил заголовки, имея "Content-Type application/octet-stream и Content-Disposition: attachment; filename = example.pdf" и похоже, что он работает для меня).

Но я не могу понять, почему выше оригинальный код не должен работать 1% времени.

Я пытался понять комбинацию браузера /adobe, но, похоже, здесь нет шаблона. ДА Одна из немногих упомянутых клиентов - это когда они перешли на "хромированный браузер", который работал большую часть времени.

Любые указатели?

Теги:
http-headers
pdf
download

1 ответ

0
Лучший ответ

После нескольких дней борьбы, наконец, выяснилось, что происходит здесь.

Мы устанавливаем длину содержимого как размер буфера (размер файла pdf) в заголовке из нашего кода и отправляем эти данные клиенту, но промежуточный модуль apache mod_gzip/mod_deflate сжимает буфер данных, а доступ к клиенту/браузеру - "Content-Length: 100 байт ", но фактические данные говорят 60-70 байт.

Не каждый браузер жалуется на это несоответствие, но некоторые браузеры рассматривают это как ошибку FATAL и показывают сообщение "невозможно загрузить файл" (мы часто видели эту проблему в Win8/IE10 и Win8/IE11, могут быть и другие параметры безопасности вызывая это в браузере!).

Для исправления мы удалили "Content-Length" из заголовка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню