Загружаю страницу, смотрю фидлером и вижу такую ситуацию:
первый запрос к ScriptResource.axd не прокатывает — сервер возвращает 401, типа not authorized
следом отправляется запрос к этому же скрипту который проходит нормально — 200, и кеш, как показыает фидлер настроен:
Добавлю что при тестировании у себя на локальной машине — всё нормально кешируется, запрос за скриптом заканчивается 304 и всё нормально. Проблемы возникают когда ставлю веб приложение на другой сервер.
И ещё: на IIS включена встроенная проверка подлинности Windows. Если включить анонимность — то всё нормально. А со встроенной проверкой постоянные 401 (хотя их видно только фидлером, в браузере всё нормально) и отсутствие кеширования.
Здравствуйте, Боб Морган, Вы писали:
БМ>И ещё: на IIS включена встроенная проверка подлинности Windows. Если включить анонимность — то всё нормально. А со встроенной проверкой постоянные 401 (хотя их видно только фидлером, в браузере всё нормально) и отсутствие кеширования.
Всё правильно. Сервер требует авторизации, браузер делает ее автоматически и показывает тебе результат. Наверное, можно как-то победить кэширование в такой конфигурации, но я сомневаюсь. Отдай ты скрипты анонимно! В них же ничего секретного нет.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
S>Всё правильно. Сервер требует авторизации, браузер делает ее автоматически и показывает тебе результат. Наверное, можно как-то победить кэширование в такой конфигурации, но я сомневаюсь. Отдай ты скрипты анонимно! В них же ничего секретного нет.
Так я и хочу их отдать анонимно. Специально завёл раздев веб-конфиг:
Но как то не помогает.
Сайт делается для интрасети, там необходимо использование встроеной аутентификации Windows (логика приложения на этом построена) поэтому на IIS нельзя включать анонимность. Может быть можно както для отдельных файлов установить
БМ>>И ещё: на IIS включена встроенная проверка подлинности Windows. Если включить анонимность — то всё нормально. А со встроенной проверкой постоянные 401 (хотя их видно только фидлером, в браузере всё нормально) и отсутствие кеширования. S>Всё правильно. Сервер требует авторизации, браузер делает ее автоматически и показывает тебе результат. Наверное, можно как-то победить кэширование в такой конфигурации, но я сомневаюсь. Отдай ты скрипты анонимно! В них же ничего секретного нет.
Подумал тут: ведь виндовая аутентификация включена и на IIS и в настройках ASP.NET. Слишком много наверно Что если попробовать на IIS её отключить...
Только тогда надо как-то достать имя пользователя, потому что сейчас оно достаётся через серверную переменную "LOGON_USER"...
БМ>Подумал тут: ведь виндовая аутентификация включена и на IIS и в настройках ASP.NET. Слишком много наверно Что если попробовать на IIS её отключить...
Здравствуйте, Боб Морган, Вы писали: БМ>Так я и хочу их отдать анонимно. Специально завёл раздев веб-конфиг:
Нет. Нужно разрешить анонимный доступ в настройках IIS. БМ>Но как то не помогает. БМ>Сайт делается для интрасети, там необходимо использование встроеной аутентификации Windows (логика приложения на этом построена) поэтому на IIS нельзя включать анонимность. Может быть можно както для отдельных файлов установить
Конечно можно. См. свойства IIS.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
БМ>>Но как то не помогает. БМ>>Сайт делается для интрасети, там необходимо использование встроеной аутентификации Windows (логика приложения на этом построена) поэтому на IIS нельзя включать анонимность. Может быть можно както для отдельных файлов установить S>Конечно можно. См. свойства IIS.
Да, спасибо, нашёл, а то у меня, как выяснилось, даже картинки через 401 ходили.
Но скрипты Ajax у меня загружаются через ScriptResource.axd, а это как я понял, обрабатывает aspnet_isapi.
Как тут быть настройкой анонимности в IIS?
Здравствуйте, Боб Морган, Вы писали:
БМ>Да, спасибо, нашёл, а то у меня, как выяснилось, даже картинки через 401 ходили.
Приготовление правильных веб приложений сродни приготовлению суши. Первые восемь лет учимся варить рис... Потом учим 10500 видов морепродуктов в лицо... И только потом сенсей разрешит разделать первую креветку
Зато потому правильный суши-мастер и ценится на вес золота.
БМ>Но скрипты Ajax у меня загружаются через ScriptResource.axd, а это как я понял, обрабатывает aspnet_isapi. БМ>Как тут быть настройкой анонимности в IIS?
Хм. А какой полный путь к ScriptResource.axd? Я просто не вполне в курсе, как там оно сделано в Atlas, т.к. его никогда не использовал.
З.Ы. На всякий случай предлагаю военную хитрость (TM): создать там, откуда запрашивается ScriptResource.axd, файл с именем ScriptResource.axd нулевой длины. И на нем настроить IIS использовать только анонимную аутентификацию. По идее, это должно привести к тому, чтобы IIS не брыкался, а сразу отдавал запрос в мозолистые лапы ASP.NET. Который, в свою очередь, должен файло игнорировать, а отдавать скрипт своими силами.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
БМ>>Да, спасибо, нашёл, а то у меня, как выяснилось, даже картинки через 401 ходили. S>Приготовление правильных веб приложений сродни приготовлению суши. Первые восемь лет учимся варить рис... Потом учим 10500 видов морепродуктов в лицо... И только потом сенсей разрешит разделать первую креветку S>Зато потому правильный суши-мастер и ценится на вес золота.
Эт точно
БМ>>Но скрипты Ajax у меня загружаются через ScriptResource.axd, а это как я понял, обрабатывает aspnet_isapi. БМ>>Как тут быть настройкой анонимности в IIS? S>Хм. А какой полный путь к ScriptResource.axd? Я просто не вполне в курсе, как там оно сделано в Atlas, т.к. его никогда не использовал.
Если смотреть на пути которые asp.net генерирует для своих клиентских скриптов, то ScriptResource.axd лежит в корне веб-приложения, но его там нету. На сколько я понял, такого файла не существует а запросы к нему обрабатывает специальный HttpHandler из System.Web.Extensions:
web.config
S>З.Ы. На всякий случай предлагаю военную хитрость (TM): создать там, откуда запрашивается ScriptResource.axd, файл с именем ScriptResource.axd нулевой длины. И на нем настроить IIS использовать только анонимную аутентификацию. По идее, это должно привести к тому, чтобы IIS не брыкался, а сразу отдавал запрос в мозолистые лапы ASP.NET. Который, в свою очередь, должен файло игнорировать, а отдавать скрипт своими силами.
Хм, интересная мысль, верится с трудом, но я всё же попробую
S>>З.Ы. На всякий случай предлагаю военную хитрость (TM): создать там, откуда запрашивается ScriptResource.axd, файл с именем ScriptResource.axd нулевой длины. И на нем настроить IIS использовать только анонимную аутентификацию. По идее, это должно привести к тому, чтобы IIS не брыкался, а сразу отдавал запрос в мозолистые лапы ASP.NET. Который, в свою очередь, должен файло игнорировать, а отдавать скрипт своими силами.
БМ>Хм, интересная мысль, верится с трудом, но я всё же попробую
Попробовал. Работает. 401 пропали. Офигеть, вот это трикс.
и в результате я наблюдаю такую ситуацию: как только сохраняю web.config и обновляю страницу по полной, то сначала скрипты сгружаются полностью, а в дальнейшем когда я жму F5 — только http 304 и body у них 0. Казалось бы всё нормально. Однако по прошествии некоторого времени (где-то с полминуты) скрипты опять начинают загружаться полностью. Хотя Expires выставлен на год вперёд. Если опять открыть web.config, скажем, поставить пробел, и сохранить (при этом, как я понял, происходит перезапуск веб приложения), то ситуация повторяется — сначала всё кешируется нормально, а через полминуты кеш опять "забывается".
Что это может быть?
Re[2]: ScriptResource.axd и кеширование
От:
Аноним
Дата:
20.04.07 05:58
Оценка:
Здравствуйте, Боб Морган, Вы писали:
БМ>Что это может быть?
Это все <compilation debug="true">
Поставь его false и все будет кешироваться.
Здравствуйте, Боб Морган, Вы писали: БМ>и в результате я наблюдаю такую ситуацию: как только сохраняю web.config и обновляю страницу по полной, то сначала скрипты сгружаются полностью, а в дальнейшем когда я жму F5 — только http 304 и body у них 0. Казалось бы всё нормально. Однако по прошествии некоторого времени (где-то с полминуты) скрипты опять начинают загружаться полностью.
А какие хидеры при этом едут с клиента? Какие хидеры приезжают в ответ?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
БМ>>и в результате я наблюдаю такую ситуацию: как только сохраняю web.config и обновляю страницу по полной, то сначала скрипты сгружаются полностью, а в дальнейшем когда я жму F5 — только http 304 и body у них 0. Казалось бы всё нормально. Однако по прошествии некоторого времени (где-то с полминуты) скрипты опять начинают загружаться полностью. S>А какие хидеры при этом едут с клиента? Какие хидеры приезжают в ответ?
В случае когда всё скешируется
RequestHeader
GET /stapel/ScriptResource.axd?d=KVt0Su87Y0mklWhGebWhuMIbpYftNjPNZ69jo60yWbHSdy597CW5GbiALaEJ4Itw0&t=633049089920000000 HTTP/1.1
Accept: */*
Accept-Language: ru
UA-CPU: x86
If-Modified-Since: Sat, 20 Jan 2007 11:56:32 GMT
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
Proxy-Connection: Keep-Alive
Pragma: no-cache
ResponseHeader
HTTP/1.1 304 Not Modified
Date: Wed, 25 Apr 2007 13:05:19 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: public
Expires: Thu, 24 Apr 2008 13:05:16 GMT
Last-Modified: Sat, 20 Jan 2007 11:56:32 GMT
Content-Length: 0
Потом всё сбрасывается и хидеры идут такие:
RequestHeader:
такой же как в прошлый раз
ResponseHeader
HTTP/1.1 200 OK
Date: Wed, 25 Apr 2007 13:13:03 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: public
Expires: Thu, 24 Apr 2008 13:13:03 GMT
Last-Modified: Sat, 20 Jan 2007 11:56:32 GMT
Content-Type: application/x-javascript
Content-Length: 84019
Здравствуйте, Боб Морган, Вы писали: БМ>Потом всё сбрасывается и хидеры идут такие:
БМ>RequestHeader: БМ>такой же как в прошлый раз
БМ>ResponseHeader БМ>HTTP/1.1 200 OK БМ>Date: Wed, 25 Apr 2007 13:13:03 GMT БМ>Server: Microsoft-IIS/6.0 БМ>X-Powered-By: ASP.NET БМ>X-AspNet-Version: 2.0.50727 БМ>Cache-Control: public БМ>Expires: Thu, 24 Apr 2008 13:13:03 GMT БМ>Last-Modified: Sat, 20 Jan 2007 11:56:32 GMT БМ>Content-Type: application/x-javascript БМ>Content-Length: 84019
И такая штука — на все последующие реквесты? Вплоть до перезапуска домена, так?
Ну что ж, тогда остается поковырять рефлектором System.Web.Handlers.ScriptResourceHandler на предмет того, как именно он кэширует результат. Скорее всего, он кладет в System.Web.Cache, а он оттуда вытесняется из-за дефицита ресурсов.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>И такая штука — на все последующие реквесты? Вплоть до перезапуска домена, так? S>Ну что ж, тогда остается поковырять рефлектором System.Web.Handlers.ScriptResourceHandler на предмет того, как именно он кэширует результат. Скорее всего, он кладет в System.Web.Cache, а он оттуда вытесняется из-за дефицита ресурсов.
Да, на все, именно до перезапуска. Но там ситуация, вобще-то говоря, странная — как уже говорил, гружу три скрипта, так вот в начале не кешируется первый, потом все три, потом ещё как нибудь, потом все загружаются а последний из кеша берётся. Вобщем чёрти что, прям плавающая несправность какая-то. Поставил тот же проект на другой сервер — всё ОК. Так что очень м.б. что дело в этом самом дефеците