Подтвердить что ты не робот

Искоренение 401 "Несанкционированных" ответов, за которыми следуют ответы 200 "Ок"

У меня возникла ситуация с большим внутренним корпоративным веб-приложением, работающим на ASP.NET 3.5, на IIS6, генерирующем 401 "Несанкционированные" ответы, за которыми следуют ответы 200 "Ok" (как описано Fiddler). Мне известно о том, почему это происходит (интегрированный auth заставляет браузер повторно отправлять учетные данные), но Im ищет некоторые мысли о том, как свести к минимуму или искоренить ситуацию. Приложение, о котором идет речь, работает в WAN, а некоторые пользователи испытывают латентность до 250 мс, поэтому принудительное последующее сообщение может иметь заметное влияние на время загрузки страницы, особенно когда на страницах создается несколько каскадных выпадающих списков.

Пользователи приложения являются внутренними в среде управляемого рабочего стола, поэтому механизмы, позволяющие браузеру отправлять учетные данные по первому запросу (возможно ли это?), могут быть возможны с точки зрения развертывания. Это будет работать для страниц, требующих идентификации пользователей, но для ресурсов, не требующих проверки подлинности (WebResource.axd, ScriptResource.axd и некоторых пользовательских веб-сервисов), что позволит анонимный auth. Ive посмотрел на определение этого на основе каждого местоположения в web.config, но результаты были смешанными (все еще количество ответов 401).

Id ценят любые рекомендации по "наилучшей практике" для решения этой ситуации. Есть много ресурсов, идентифицирующих проблему, но никто из них не нашел подходящего решения.

Спасибо!

Изменить. Ресурсы, не требующие аутентификации (т.е. веб-службы, используемые для каскадных выпадающих списков), могут запрашиваться анонимно, добавляя запись местоположения в веб-конфигурацию, но я еще не нашел ответ для аутентифицированных ресурсов.

4b9b3361

Ответ 1

К сожалению, это артефакт схемы HTTP NTLM.

Короче говоря, браузер (Internet Explorer или иначе) не знает, что ему нужно полностью аутентифицироваться до тех пор, пока он не будет отскакивать с ответом 401, содержащим заголовок ответа WWW-Authenticate.

В случае WWW-Authenticate: NTLM - достаточно досадно - для завершения требуется два 401 ответа на одно постоянное соединение, и этот процесс должен быть повторен, как только постоянное соединение HTTP будет закрыто. Поэтому, даже если вы смогли заставить браузер инициировать запрос вслепую попытку NTLM, по крайней мере один ответ 401 не может быть удален из транзакции.

Я думаю, что лучше всего будет максимизировать время, в течение которого постоянные соединения остаются свободными при простоя.

Ответ 2

CSCRIPT.EXE c:\inetpub\adminscripts\ADSUTIL.VBS SET W3SVC/AuthPersistSingleRequest FALSE

Значительно уменьшит количество 401.

Ответ 3

Я считаю, что вы можете убедить Firefox автоматически отправлять учетные данные NTLM в список белых доменов через настройки "about: config" - использовать параметр "network.automatic-ntlm-auth.trusted-uris". Я сам не пробовал это. Я не уверен, что есть эквивалент для Internet Explorer.

К сожалению, если вы используете что-то вроде Kerberos, похоже, нет способа избежать 401.

Ответ 4

Вам может потребоваться проверка подлинности с использованием форм, если задержка с задержкой 401 слишком велика. Пользователям придется явно входить в систему, но только один раз. Затем вы можете использовать cookie или cookieless схему и получить ответ с первой попытки.

Я предполагаю, что загрузка страницы будет медленной, если у вас есть каскадные выпадающие списки, и ваша начальная загрузка страницы заполняет одно значение, которое заставляет POST получать следующий список, устанавливать это значение, другой POST, чтобы снова получить следующий список, и скоро. Если это так, возможно, вам нужно заполнить все эти выпадающие списки в первом раунде, а не ждать ответов POST.