Я обработчик ASHX, который отображает в браузере в формате PDF из бинарных данных, я использую .NET Framework 4.0, IIS 6 и Chrome браузер:PDF сохранены как ASPX/ASHx над HTTPS
Dim s As System.IO.MemoryStream = HttpContext.Current.Session("tmp_binaryData")
s.Seek(0, System.IO.SeekOrigin.Begin)
With HttpContext.Current.Response
.ClearContent()
.ClearHeaders()
.ContentType = "application/pdf"
.AddHeader("Content-Disposition", "inline; filename='test.pdf'")
.BinaryWrite(s.ToArray)
.Flush()
End With
При доступе от HTTPS, и пользователь пытается сохранить файл (нажав кнопку сохранения на панели инструментов просмотра PDF), файл сохраняется как ashx, а не pdf. Этого не происходит, если веб-приложение доступно из HTTP (порт 80).
Стоит отметить, что если я изменю ContentType на «attachment/pdf», файл будет автоматически сохранен как PDF правильно.
Я использовал все виды комбинаций заголовков без каких-либо успехов, отключил просмотр PDF в формате PDF, попробовал Adobe Reader, проверял параметр сжатия файлов на IIS, проверенные типы MIME, просто чтобы перечислить некоторые.
В качестве дополнительной информации я использую этот те же самые теги на другом веб-приложении, размещенном на IIS7, на другом сервере, и проблемы нет, поэтому у него есть что-то с конфигурацией IIS 6.
UPDATE Jan/05/2017
я загрузил пробную PDF из файла через Response.Redirect("test.pdf")
на производственном сервере и файл успешно экономит на Chrome. Так, я сравнил заголовки обоих методов отображения:
Response.Redirect() Метод:
headers="
Accept-Ranges: bytes
Content-Length: 696505
Content-Type: application/pdf
Date: Thu, 05 Jan 2017 18:05:09 GMT
ETag: "33dad7f8baccd11:11a1"
Last-Modified: Wed, 22 Jun 2016 19:19:18 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET"
обработчика ASHX (filestram) Метод:
headers="
Cache-Control: private
Content-Disposition: inline; filename='Prueba.pdf'
Content-Type: application/pdf
Date: Thu, 05 Jan 2017 18:09:58 GMT
Server: Microsoft-IIS/6.0
Transfer-Encoding: chunked
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET"
Я заметил, что в методе ASHX отсутствуют заголовки «Accept-Ranges» и «Content-Lenght», но он привлек мое внимание, что он имеет заголовок «Transfer-Encoding: chunked». Считаете ли вы, что это может вызвать проблему? Я попытаюсь воспроизвести первые заголовки методов на ASHX.