Thông báo lỗi khi người dùng truy cập trang SharePoint Web được xuất bản trong ISA Server 2006 hoặc trong Windows Essential Business Server 2008: "HTTP 401 trái phép"


Triệu chứng


Khi người dùng truy cập trang SharePoint Web được xuất bản trong Microsoft Internet Security and Acceleration (ISA) Server 2006, ISA Server 2006 SP1 hoặc Windows Essential Business Server 2008, người dùng có thể nhận được một thông báo lỗi sau:lỗi thông báo 1
HTTP 401 trái phép
Thông báo lỗi 2
HTTP 500 máy chủ từ chối quy định đại lý đồng nguyên (URL). Liên hệ với quản trị viên máy chủ.
Sự cố này xảy ra khi các điều sau là đúng:
  • Nghe Web sử dụng quy tắc xuất bản SharePoint Web, xác thực biểu mẫu được cấu hình.
  • Web client gửi yêu cầu bài cho các trang SharePoint Web.
  • URL yêu cầu bài có chứa các ký tự mở rộng. Ví dụ: URL chứa người, à hoặc è.

Nguyên nhân


Sự cố này xảy ra do ISA Server hoặc Windows Essential Business Server 2008 không thể phân tích cú pháp URL có chứa các ký tự mở rộng. Trong trường hợp này, máy chủ ISA hoặc Windows Essential Business Server 2008 từ chối yêu cầu đăng máy khách gửi.

Giải pháp


Để giải quyết sự cố này, hãy làm theo các bước sau:
  1. Áp dụng hotfix được mô tả trong bài viết cơ sở kiến thức Microsoft 940250. Để biết thêm chi tiết, bấm vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
    940250 mô tả gói hotfix ISA Server 2006: ngày 16 tháng 12 năm 2007
  2. Sao chép lệnh sau vào Notepad:chú ý giải quyết sự cố trong ISA Server 2006, sử dụng sau. Bạn không cần phải áp dụng hotfix trong bài viết này dành cho phiên bản SP1 của ISA Server 2006, nhưng bạn có thể sử dụng tập lệnh.
    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. Lưu tệp dưới dạng tệp tập lệnh Microsoft Visual Basic bằng cách sử dụng phần mở rộng tên tệp .vbs. Ví dụ: lưu tệp bằng cách sử dụng tên sau:
    EnableKB940248.vbs
  4. Tại dấu nhắc lệnh, di chuyển đến vị trí mà bạn đã lưu tệp EnableKB940248.vbs.
  5. Chạy lệnh sau:
    cscript EnableKB940248.vbs
Lưu ý Sau khi bạn làm theo các bước sau, chỉ phần truy vấn của URL có thể chứa các ký tự mở rộng. Phần truy vấn sau dấu chấm hỏi (?) trong URL. Phần trước dấu chấm hỏi URL không chứa ký tự mở rộng ngay cả khi bạn sử dụng giải pháp này. Nếu bạn muốn loại bỏ các thay đổi được thực hiện khi bạn chạy tập lệnh trong bước 5, chạy lệnh sau:
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

Trạng thái


Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".