2014-02-01 2 views
0

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

Вот фрагмент кода (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()); 

Строка класса и добавить метод только для примера.

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

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

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

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

ответ

0

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

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

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

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

Смежные вопросы