Cfheader ColdFusion 11 неправильно передается в IE 8

У меня есть стампер. Установил CF11 на наш тестовый сервер. Провел регрессионное тестирование и столкнулся с проблемой. У меня есть .cfm, который загружает информацию в Excel. Он отлично отображается в CF10 (и предыдущих версиях). В CF11 он отлично отображается в IE10 и в FireFox. Однако он ужасно терпит неудачу в IE8, и, поскольку большинство наших пользователей по-прежнему должны использовать IE8, это шоу-стоппер.

Вот код, который настраивает дамп Excel — имя страницы show_table.cfm:

    <cfif IsDefined('URL.ExcelDump')> 
        <cfheader name="Content-Disposition" value="filename=#Session.utilstablename#.xls">
        <cfcontent type="application/vnd.ms-excel">
    </cfif>

Я уже отключил эти строки - без изменений в приведенной ниже ошибке:

   <META http-EQUIV="Pragma" CONTENT="no-cache">  
   <META http-EQUIV="cache-control" CONTENT=" no-store,no-cache, must-revalidate"> 

Я ожидаю, что это произойдет — IE10 делает аналогичную панель открытия/сохранения:

вот что происходит в IE8: сбой загрузки ie8

Обратите внимание, что имя файла при сбое совпадает с именем страницы .cfm, которая пытается выполнить загрузку. Похоже, он не видит, что cfheader устанавливает для него ожидаемое имя (которое для этой конкретной загрузки должно быть er_quality_items_view.xls).

Какие-нибудь мудрые слова? есть ли параметр в IIS (мы используем 8), который может повлиять на это поведение?


person Casuzen    schedule 13.11.2014    source источник
comment
Я только что попытался удалить cfheader. FF по-прежнему отображается нормально, но IE8 по-прежнему не работает...   -  person Casuzen    schedule 13.11.2014
comment
Это за SSL? IE8 жалуется на заголовок без кеша. Попробуйте установить для заголовка cache-control значение private и удалить заголовок pragma.   -  person abbottmw    schedule 15.11.2014
comment
@abbottmw - да .. это за SSL. Я прокомментировал два метатега без разницы.   -  person Casuzen    schedule 18.11.2014
comment
Можете ли вы использовать такой инструмент, как Fiddler, и просматривать заголовки ответов, чтобы узнать, какие заголовки устанавливаются? Вы можете зайти в IIS, а также посмотреть, какие заголовки HTTP устанавливаются для сайта, и изменить их. IE8 жалуется на любые заголовки без кеша в SSL.   -  person abbottmw    schedule 18.11.2014
comment
попробуем это... но если записей без кеша нет, и cfcontent по-прежнему не будет превосходным, какие-либо предложения относительно того, как действовать дальше? Я пытался использовать подпрограмму JavaScript для экспорта, чтобы преуспеть с не большим успехом, чем CF...   -  person Casuzen    schedule 19.11.2014


Ответы (2)


Специфическим для вашей проблемы является поведение некоторых версий IE согласно MVP Erik Law (ссылка ниже):

"если пользователь попытается загрузить файл через соединение HTTPS, любые заголовки ответа, препятствующие кэшированию, приведут к сбою процесса загрузки файла."

Таким образом, на самом деле это предоставление токенов заголовка Cache-Control, таких как no-cache и no-store, Vary. > или печально известный заголовок Pragma no-cache, из-за которого браузер прерывает загрузку при использовании ssl. Предполагая, что ссылка на блог Эрика Ло выдержит испытание временем, вы можете прочитать все об этом по ссылке ниже.

Таким образом, настройки кэша CFHEADER для всего сайта в целом могут быть хорошими, но вы захотите очистить все это, когда дело доходит до загрузки файлов. Попробуйте поместить эту маленькую жемчужину над кодом загрузки CFML:
‹cfset getPageContext().getResponse().reset() /›
и повторите попытку.

http://blogs.msdn.com/b/ieinternals/archive/2009/10/03/internet-explorer-cannot-download-over-https-when-no-cache.aspx
https://groups.google.com/forum/?fromgroups#!topic/openbd/ke6cSVHXMfM

person Al from Long Beach    schedule 21.11.2014
comment
Это единственный пост в Интернете, который помог мне решить мою проблему. Спасибо! У меня возникла проблема в ColdFusion 11, когда тег ‹cfheader /›, который я устанавливал для Cache-Control, просто игнорировался и не работал. Пока не уверен на 100%, почему это так или почему это работает, но это работает! Спасибо еще раз! - person The Red Duke; 15.03.2016

Я искал этот ответ высоко и низко! Я хотел сказать спасибо, потому что это помогло мне решить связанную с этим проблему со ссылками и Microsoft Office (Word, Powerpoint, Excel). Если пользователь щелкает ссылку из Word, и это веб-сайт Https, и он использует cfheader для обслуживания файлов PDF на странице, он не сможет открыть https://....pdf. Не удается открыть указанный файл. Если вы переходите на страницу напрямую или щелкаете из Outlook, все работает нормально.

В Edge я щелкнул правой кнопкой мыши страницу и выбрал «Проверить», чтобы увидеть исходный код страницы.

При использовании cfheader для обслуживания файла по умолчанию он устанавливает для него значение:

Cache-Control: no-cache
..
Pragma: no-cache

Отсутствие кеша - вот почему это приводит к сбою. Чтобы переопределить этот параметр, сделайте первые 3 строки следующим образом:

<cfset getPageContext().getResponse().reset() /> 
<cfheader name="Cache-Control"  value="max-age=360">
<cfheader name="Pragma" value="cache">

<cfheader name="Content-Disposition" value="inline; filename=#GetResults.report_file_nm1#" >
<cfcontent type="application/pdf" file="#myfilelocation#" deletefile="no">

В Edge я щелкнул правой кнопкой мыши страницу и выбрал «Проверить», чтобы снова увидеть исходный код страницы, и теперь вижу это:

Cache-Control: max-age=360
..
Pragma: cache

Подробнее о проблеме, которую я пытался решить, ниже:

https://answers.microsoft.com/en-us/msoffice/forum/msoffice_word-mso_win10-mso_o365b/cannot-open-https-hyperlinks-to-pdf-documents-from/7262cd15-9d42-436b-9d0a-074882d25773?page=3

Спасибо еще раз! Это сработало для меня.

person computeranalyst    schedule 11.03.2021