У меня та же проблема, что и у вас, и я выдвинул теорию;)
Из того, что я могу сказать, когда JS запрашивается "первым" (в сеансе, хотя, возможно, и время жизни приложения)) модуль скрипта устанавливает заголовок «Expire» для фрагмента содержимого.Что вы, возможно, не замечаете, так это то, что ваш вызов SetExpires молча игнорируется в этом первом случае ... внутренняя часть этого метода [недокументированное, я мог бы добавить] только позволяет вам установить заголовок expires If и Only Ifновая дата истечения срока раньше, чем установленная в настоящее время ... поскольку «сейчас + 5 дней» не ранее, чем год назад, она фактически не устанавливается!
Все остальные вызовы (я думаю) в порядке после этого первого, так как любой модуль, предоставляющий прокси-серверы сценариев, не устанавливает срок действия снова на 304-х, поэтому ваш вызов SetExpires считается «ОК».
Что я не понимаю, так это то, что вызывает повторный вызов '.asmx / js', когда в браузере все еще должна быть кэшированная копия с будущим локальным сроком действия :(
Досадно, что класс HttpCachePOlicy запечатан, поэтому я не могу обойти его :( (Установка первого модуля не будет работать, так как SetExpires будет успешным для модуля сценария, который вызывается после вашего)
Я должен добавитьчто такое поведение имеет «смысл», так как это означает, что прокси-серверы скриптов никогда не будут устаревшими, поскольку они всегда будут повторно запрашиваться ... к сожалению, для нас 304 стали довольно дорогостоящими, и я могу житьпоскольку он устарел, так что хотелось бы некоторого контроля над этим поведением ...;)