ISA Server 2004、ISA Server 2006 或 Windows 基本业务服务器2008在使用转发代理时阻止包含接受编码的 HTTP 标头的请求


症状


在运行 Microsoft Internet 安全和加速(ISA) Server 2004 Service Pack 2 或 Windows 基本业务服务器2008的服务器上,禁用以下两个 Web 筛选器:
  • 压缩筛选器
  • 缓存压缩的内容筛选器
执行此操作后,当使用转发代理时,ISA Server 2004 或 Windows 重要的业务服务器2008将阻止包含接受编码的 HTTP 标头的请求。这些 Web 筛选器在 ISA Server 2004 Service Pack 2 或 Windows 基本业务服务器2008中引入。 由于涉及某些 Web 服务器的程序兼容性问题,您可能会禁用这些 Web 筛选器。

解决方案


服务包信息

若要解决此问题,请安装 ISA Server 2004 Service Pack 3 (SP3),然后运行本节中所述的 Microsoft Visual Basic 脚本。 有关如何获取最新的 ISA Server 2004 service pack 的详细信息,请单击下面的文章编号,查看 Microsoft 知识库中的文章:
891024 如何获取最新的 ISA Server 2004 service pack
安装 service pack 后,运行以下脚本以启用新的配置参数。如果在转发代理方案中禁用了压缩筛选器,此新参数允许 ISA 服务器转发包含接受编码的 HTTP 标头的请求。若要执行此操作,请执行以下步骤。Microsoft 提供的编程示例仅用于说明,没有任何明示或默示的保证。这包括但不限于对适销性或特定用途适用性的默示担保。本文假定你熟悉所演示的编程语言,以及用于创建和调试过程的工具。Microsoft 支持工程师可帮助解释特定过程的功能。但是,它们不会修改这些示例以提供额外的功能或构建过程来满足你的特定要求。
  1. 单击 "开始",指向 "所有程序",指向 "附件",然后单击 "记事本"。
  2. 将以下代码粘贴到记事本文档中。
    Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"Const SE_VPS_NAME = "AccessRuleSendAcceptEncodingHeader"Const SE_VPS_VALUE = trueSub SetValue()    ' Create the root obect.    Dim root  ' The FPCLib.FPC root object    Set root = CreateObject("FPC.Root")    'Declare the other objects needed.    Dim array       ' An FPCArray object    Dim VendorSets  ' An FPCVendorParametersSets collection    Dim VendorSet   ' An FPCVendorParametersSet object    ' Get references to the array object    ' and 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. 将记事本文件另存为 "AccessRuleSendAcceptEncodingHeader"。
  4. 双击 .vbs 文件以运行脚本。
要禁用新配置参数,请按照下列步骤操作:
  1. 单击 "开始",指向 "所有程序",指向 "附件",然后单击 "记事本"。
  2. 将以下代码粘贴到记事本文档中。
    Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}" Const SE_VPS_NAME = "AccessRuleSendAcceptEncodingHeader" Const SE_VPS_VALUE = false Sub SetValue()      ' Create the root obect.      Dim root ' The FPCLib.FPC root object      Set root = CreateObject("FPC.Root")      'Declare the other objects needed.      Dim array ' An FPCArray object      Dim VendorSets ' An FPCVendorParametersSets collection      Dim VendorSet   ' An FPCVendorParametersSet object           ' Get references to the array object      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 If End Sub Sub CheckError()      If Err.Number <> 0 Then           WScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description Err.Clear      End If End Sub SetValue
  3. 将记事本文件另存为 "Disable_AccessRuleSendAcceptEncodingHeader .vbs"。
  4. 双击 .vbs 文件以运行脚本。

状态


Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。