У меня есть приложение, использующее веб-формы ASP.NET 4.0 в IIS 6.0, которое работает уже несколько лет. Недавнее развертывание приложения вызвало некоторые очень случайные (для нас) периодические проблемы в браузере Safari (а не в любом другом браузере).
После перезагрузки сервера приложение какое-то время работает нормально, но затем оно «ломается».
Это 100% серверный уровень, так как он работает на всех компьютерах, пока не «сломается». После взлома он будет сломан на всех компьютерах, на которых запущена именно эта версия Safari. Если вы измените версию Safari или переключитесь между http и https, он снова будет работать, пока эта версия не сломается.
Похоже, что взлом связан с заголовками, отправленными на сервер.
После того, как он «сломан», у него возникают проблемы с применением CSS к элементам управления ASP.NET, метод addhistory выдает ошибки javascript, поскольку не может найти функцию __dopostback.
Ответ найден по адресу: https://stackoverflow.com/questions/5478181/net-4-0-website-cannot-identify-some-applewebkit-based-browsers
"Похоже, я нашел основную причину проблемы. Механизм разрешения UserAgent -> BrowserCaps использует кеш для временного хранения сопоставлений. К сожалению, он использует (по умолчанию) первые 64 символа строки UserAgent в качестве ключа кеша, и ЭТО просто BS ... Иногда всплывает пользовательский агент, который выглядит как Safari, но на самом деле это не так, и этот агент не разрешен должным образом (Mozilla 0.0), но отображение все еще сохраняется в кеше, что означает, что все строки UserAgent с тем же префиксом из 64 символов теперь также неправильно отображаются, пока эта запись в кеше не истечет (скользящее окно с 1 минутой). К счастью, длину ключа, используемую для кэширования, можно настроить с помощью
<browserCaps userAgentCacheKeyLength="..." />
в разделе конфигурации.
Я увеличил длину ключа до 256, и с тех пор проблема исчезла. Теперь я попытаюсь выяснить, какая строка UserAgent была ответственна за отравление кеша в первую очередь - и я обновлю этот пост, если что-нибудь найду ».