Сообщение об ошибке, когда пользователь получает доступ к веб-узле SharePoint, который публикуется в ISA Server 2006 или в Windows Essential Business Server 2008: "HTTP 401 Несанкционированный"


Проблемы


Когда пользователь получает доступ к веб-узле SharePoint, который публикуется в Microsoft Internet Security and Acceleration (ISA) Server 2006, ISA Server 2006 SP1 или в Windows Essential Business Server 2008, пользователь может получить одно из следующих сообщений об ошибке:Сообщение об ошибке 1
HTTP 401 Несанкционированное
Сообщение об ошибке 2
HTTP 500 Сервер отрицал указанный Единый ресурс Locator (URL). Свяжитесь с администратором сервера.
Эта проблема возникает при выполнении указанных ниже условий.
  • В веб-слушателе, которое использует правило публикации веб-страниц SharePoint, настраивается аутентификация HTML Form.
  • Веб-клиент отправляет запрос POST на веб-узел SharePoint.
  • URL-адрес запроса POST содержит расширенные символы. Например, URL-адрес содержит q, q или q.

Причина


Эта проблема возникает из-за того, что ISA Server или Windows Essential Business Server 2008 не могут разобрать URL-адрес, содержащий расширенные символы. В этом случае ISA Server или Windows Essential Business Server 2008 отклоняют запрос POST, который отправляет клиент.

Решение


Чтобы устранить эту неполадку, выполните следующие действия:
  1. Примените hotfix, описанный в статье Microsoft Knowledge Base 940250. Для получения дополнительной информации, нажмите на следующий номер статьи, чтобы просмотреть статью в базе знаний Microsoft:
    940250 Описание пакета hotfix СЕРВЕРа ISA 2006: 16 июля 2007
  2. Скопируйте следующий скрипт в Notepad:Примечание для решения этой проблемы в ISA Server 2006, используйте следующий скрипт. Вы не должны применять hotfix в этой статье для ISA Server 2006 SP1, но вы должны использовать сценарий.
    Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"Const SE_VPS_NAME = "CookieFilterDecodeUEncoding"Const SE_VPS_VALUE = trueSub SetValue()    ' Create the root object.    Dim root  ' The FPCLib.FPC root object    Set root = CreateObject("FPC.Root")    'Declare the other objects that are needed.    Dim array       ' An FPCArray object    Dim VendorSets  ' An FPCVendorParametersSets collection    Dim VendorSet   ' An FPCVendorParametersSet object    ' Get references to the array object    ' and to the network rules collection.    Set array = root.GetContainingArray    Set VendorSets = array.VendorParametersSets    On Error Resume Next    Set VendorSet = VendorSets.Item( SE_VPS_GUID )    If Err.Number <> 0 Then        Err.Clear        ' Add the item        Set VendorSet = VendorSets.Add( SE_VPS_GUID )        CheckError        WScript.Echo "New VendorSet added... " & VendorSet.Name    Else        WScript.Echo "Existing VendorSet found... value- " &  VendorSet.Value(SE_VPS_NAME)    End If    if VendorSet.Value(SE_VPS_NAME) <> SE_VPS_VALUE Then        Err.Clear        VendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUE        If Err.Number <> 0 Then            CheckError        Else            VendorSets.Save false, true            CheckError            If Err.Number = 0 Then                WScript.Echo "Done with " & SE_VPS_NAME & ", saved!"            End If        End If    Else        WScript.Echo "Done with " & SE_VPS_NAME & ", no change!"    End IfEnd SubSub CheckError()    If Err.Number <> 0 Then        WScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description        Err.Clear    End IfEnd SubSetValue
  3. Сохранить файл в виде файла Microsoft Visual Basic, используя расширение имени файла .vbs. Например, сохраните файл, используя следующее имя:
    EnableKB940248.vbs
  4. В запросе команды переместитесь в место, где вы сохранили файл EnableKB940248.vbs.
  5. Выполните следующую команду:
    cscript EnableB940248.vbs
Заметка После выполнения этих шагов только часть запроса URL-адреса может содержать расширенные символы. Часть запроса следует за вопросительным знаком (qM) в URL. Часть, которая появляется перед вопросительным знаком в URL-адресе, не может содержать расширенные символы даже после использования этого разрешения. Если требуется удалить изменения, внесенные при запуске скрипта в шаге 5, запустите следующий сценарий:
Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"Const SE_VPS_NAME = "CookieFilterDecodeUEncoding"Const SE_VPS_VALUE = FalseSub SetValue()' Create the root object.Dim root ' The FPCLib.FPC root objectroot = CreateObject("FPC.Root")'Declare the other objects that are needed.Dim array ' An FPCArray objectDim VendorSets ' An FPCVendorParametersSets collectionDim VendorSet ' An FPCVendorParametersSet object' Get references to the array object' and to the network rules collection.array = root.GetContainingArrayVendorSets = array.VendorParametersSetsOn Error Resume NextVendorSet = VendorSets.Item(SE_VPS_GUID)If Err.Number <> 0 ThenErr.Clear()' Add the itemVendorSet = VendorSets.Add(SE_VPS_GUID)CheckError()WScript.Echo("New VendorSet added... " & VendorSet.Name)ElseWScript.Echo("Existing VendorSet found... value- " & VendorSet.Value(SE_VPS_NAME))End IfIf VendorSet.Value(SE_VPS_NAME) <> SE_VPS_VALUE ThenErr.Clear()VendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUEIf Err.Number <> 0 ThenCheckError()ElseVendorSets.Save(False, True)CheckError()If Err.Number = 0 ThenWScript.Echo("Done with " & SE_VPS_NAME & ", saved!")End IfEnd IfElseWScript.Echo("Done with " & SE_VPS_NAME & ", no change!")End IfEnd SubSub CheckError()If Err.Number <> 0 ThenWScript.Echo("An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description)Err.Clear()End IfEnd SubSetValue Change to:[INSERT CORRECTION]Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"Const SE_VPS_NAME = "CookieFilterDecodeUEncoding"Const SE_VPS_VALUE = falseSub SetValue()' Create the root object.Dim root ' The FPCLib.FPC root objectSet root = CreateObject("FPC.Root")'Declare the other objects that are needed.Dim array ' An FPCArray objectDim VendorSets ' An FPCVendorParametersSets collectionDim VendorSet ' An FPCVendorParametersSet object' Get references to the array object' and to the network rules collection.Set array = root.GetContainingArraySet VendorSets = array.VendorParametersSetsOn Error Resume NextSet VendorSet = VendorSets.Item( SE_VPS_GUID )If Err.Number <> 0 ThenErr.Clear' Add the itemSet VendorSet = VendorSets.Add( SE_VPS_GUID )CheckErrorWScript.Echo "New VendorSet added... " & VendorSet.NameElseWScript.Echo "Existing VendorSet found... value- " & VendorSet.Value(SE_VPS_NAME)End Ifif VendorSet.Value(SE_VPS_NAME) <> SE_VPS_VALUE ThenErr.ClearVendorSet.Value(SE_VPS_NAME) = SE_VPS_VALUEIf Err.Number <> 0 ThenCheckErrorElseVendorSets.Save false, trueCheckErrorIf Err.Number = 0 ThenWScript.Echo "Done with " & SE_VPS_NAME & ", saved!"End IfEnd IfElseWScript.Echo "Done with " & SE_VPS_NAME & ", no change!"End IfEnd SubSub CheckError()If Err.Number <> 0 ThenWScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.DescriptionErr.ClearEnd IfEnd SubSetValue

Статус


Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".