Предыстория:
У меня есть веб-портал в .NET 3.5 на IIS 6 веб-сервер. В настоящее время существует страница, которой присвоено значение, и на основе этого значения выполняется поиск файла PDF в веб-службе и отображение результатов для пользователя на другой вкладке веб-страницы. Это делается с помощью следующего кода.
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Clear();
context.Response.AddHeader("Accept-Header", pdfStream.Length.ToString());
context.Response.ContentType = "application/pdf";
context.Response.BinaryWrite(pdfStream.ToArray());
context.Response.Flush();
Это работает и работает годами. Однако мы получили сообщение от клиента о том, что конкретный клиент возвращал PDF-файл как один и тот же PDF-файл каждый раз, пока они не очистили временный интернет-кеш.
Я подумал, круто, это легкий вопрос. Я просто добавлю к ответу заголовки кеша, чтобы его никогда не кешировать. Поэтому я добавил следующее:
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);//IE set to not cache
context.Response.Cache.SetNoStore();//Firefox/Chrome not to cache
context.Response.Cache.SetExpires(DateTime.UtcNow); //for safe measure expire it immediately
После быстрого теста я получил именно то, что ожидал в заголовке ответа.
Cache-Control no-cache, no-store
Pragma no-cache
Expires -1
Проблема:
Итак, это было запущено. В первый день все казалось крутым. На следующий день, бац, у всех начались белые экраны, а PDF-файлы не отображались. После дальнейшего расследования выяснилось, что это был только IE 6,7,8. Chrome в порядке, Firefox в порядке, сафари в порядке, даже IE 9 в порядке. Не зная, почему это произошло, я отменил свое изменение и развернул его, и все снова заработало.
Я искал повсюду, пытаясь выяснить, почему мои заголовки кеширования, похоже, сбивают с толку IE 6-8, но безрезультатно. Кто-нибудь сталкивался с подобными проблемами с IE 6-8? Что-то мне не хватает? Спасибо за понимание.