У меня есть следующая конфигурация:
- IIS 7,5
- Веб-сайт A - Аутентификация: все опции отключены, только окна
аутентификация включена.
- Приложение B (как суб-веб-приложение A): Аутентификация: Анонимный включен, Базовый включен, Windows аутентификация отключена.
Оба приложения работают под управлением ASP.NET 4, отдельные пулы приложений, классический режим.
Теперь приложение B имеет такое странное поведение, которое я заметил в Fiddler.
Для каждого запроса страницы aspx отображаются две записи:
Первый запрос:
GET https://example.com/page.aspx HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://example.com/
Accept-Language: en-GB
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Zune 4.7)
Cookie: ASP.NET_SessionId=123456789
Accept-Encoding: gzip, deflate
Host: example.com
Authorization: NTLM DFGHJKLDRFGHNXAAAAA==
Connection: Keep-Alive
Cache-Control: no-cache
Content-Length: 0
В ответ я получаю 401. Затем для того же ресурса делается второй запрос:
GET https://example.com/page.aspx HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://example.com/
Accept-Language: en-GB
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Zune 4.7)
Authorization: Basic ZXVyasdasdasdasdasdasd=
Accept-Encoding: gzip, deflate
Host: example.com
Connection: Keep-Alive
Cache-Control: no-cache
Content-Length: 0
Cookie: ASP.NET_SessionId=lasdasdasdasdasdasdasd
Второй в порядке со статусом 200.
Разница заключается в строке «Авторизация», первая показывает NTLM (предоставление 401 доступа запрещен), иногда вызывает неожиданное поведение javascripts, например, с панелями обновления (Sys.WebForms.PageRequestManagerParserErrorException).
Что мне не хватает? Как настроить IIS (или веб-приложение), чтобы не выполнять этот первый запрос «NTLM»?
Спасибо за вашу помощь.
Редактировать: еще одна интересная проблема, которую я заметил: в той же среде у меня есть второй набор этих приложений (только связанный с другой базой данных). В этом наборе для приложения A включена анонимная аутентификация, включены формы и отключены окна. Приложение B имеет те же настройки, что и в первом наборе. В этом случае нет неудавшихся запросов (401). Все работает гладко.