История вопроса:
У меня есть веб-портал в .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? Есть ли что-то, что мне не хватает? Спасибо за понимание.