Error message when client computers that are behind a proxy server access Web sites that are published by using ISA Server 2004: "404 Not Found. The requested item could not be located (12028)" (917265)



The information in this article applies to:

  • Microsoft Internet Security and Acceleration Server 2004, Standard Edition
  • Microsoft Internet Security and Acceleration Server 2004 Enterprise Edition Service Pack 2

SYMPTOMS

Consider the following scenario:
  • You have multiple Web sites that are hosted on a back-end Web server.
  • You publish the Web server by using Microsoft Internet Security and Acceleration (ISA) Server 2004.
  • You use the Requests appear to come from original client option and the Forward the Original host header instead of the actual one [specified above] option to configure the Web publishing rule.
In this scenario, if you access the Web site from a client computer that is behind a proxy server that caches forward connections, you may receive an error message that resembles the following:
404 Not Found. The requested item could not be located (12028)

CAUSE

This problem occurs if the Web publishing ISA Server cannot establish a connection to the Web server.

This problem may occur if external client computer requests that are sent to the ISA Server on the same TCP connection have different host headers. This problem may also occur if the requests are addressed to the same published Web server.

In this scenario, ISA Server closes the connection that is used for the first host header request and opens a new connection to the published Web server when the host header changes. ISA Server opens new connections to the Web server because some Web servers incorrectly handle requests that are sent with different host headers that arrive on the same TCP connection.

If you enable the Requests appear to come from original client option, the same source IP and port is used by the ISA server when establishing the second TCP connection to the published Web server. Then, the Web server may not respond to the second TCP connection try and you may receive the error message that the "Symptoms" section describes.

RESOLUTION

To resolve this problem, install the hotfix that is described in Microsoft Knowledge Base article 917902. For more information, click the following article number to view the article in the Microsoft Knowledge Base:

919621 Description of the ISA Server 2004 hotfix package: May 31, 2006

After you apply the hotfix, run the Microsoft Visual Basic script that is described in this section. To do this, follow these steps.

Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements.
  1. Click Start, point to Programs, point to Accessories, and then click Notepad.
  2. Copy and paste the following code into a new Notepad document, and then save it to a file name with a .vbs extension such as AddReuseSessionForDifferentHostHeader.vbs:

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '
    ' Copyright (c) Microsoft Corporation. All rights reserved.
    ' THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE
    ' RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE
    ' USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS
    ' HEREBY PERMITTED.
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' This script adds a new VendorParametersSets under the array root.
    ' Used to added new parameters that are needed for hotfixes or service packs.
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
    Sub AddReuseSessionForDifferentHostHeader()
     
        ' 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( "{143F5698-103B-12D4-FF34-1F34767DEabc}" )
     
        If Err.Number <> 0 Then
            Err.Clear
     
            ' Add the item
            Set VendorSet = VendorSets.Add( "{143F5698-103B-12D4-FF34-1F34767DEabc}" )
            CheckError
            WScript.Echo "New VendorSet added... " & VendorSet.Name
     
        Else
            WScript.Echo "Existing VendorSet found... value- " &  VendorSet.Value("ReuseSessionForDifferentHostHeader")
        End If
     
        if VendorSet.Value("ReuseSessionForDifferentHostHeader") <> true Then
     
            Err.Clear
            VendorSet.Value("ReuseSessionForDifferentHostHeader") = true
     
            If Err.Number <> 0 Then
                CheckError
            Else
                VendorSets.Save false, true
                CheckError
     
                If Err.Number = 0 Then
                    WScript.Echo "Done with ReuseSessionForDifferentHostHeader, saved!"
                End If
            End If
        Else
            WScript.Echo "Done with ReuseSessionForDifferentHostHeader, 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
     
    AddReuseSessionForDifferentHostHeader
    

  3. Double-click the .vbs file to run the script.

WORKAROUND

To work around this problem, use the Requests appear to come from the ISA Server computer option instead of Requests appear to come from original client option to configure the Web publishing rule. To do this, follow these steps:
  1. Start the ISA Server Management tool.
  2. Expand the ISA Server computer node, and then click Firewall Policy.
  3. Right-click the Web publishing rule that you want to configure, and then click Properties.
  4. Click the To tab, click Requests appear to come from the ISA Server computer, and then click OK.
  5. Click Apply to save the changes and update the configuration.

    Note This workaround may resolve similar errors that are caused by the published Web server incorrectly routing return TCP traffic to the client computer IP address through the ISA server.

MORE INFORMATION

To disable the reuse of TCP connections when the host header is different, run the following script:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' Copyright (c) Microsoft Corporation. All rights reserved.
' THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE
' RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE
' USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS
' HEREBY PERMITTED.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' This script removes a VendorParametersSet value.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub ReuseSessionForDifferentHostHeader()

    ' 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( "{143F5698-103B-12D4-FF34-1F34767DEabc}" )

    If Err.Number <> 0 Then
        Err.Clear

        WScript.Echo "VendorParametersSet does not exist."

    Else
        Err.Clear
        VendorSet.RemoveValue("ReuseSessionForDifferentHostHeader")

        If Err.Number <> 0 Then
            CheckError
        Else
            VendorSets.Save false, true
            CheckError

            If Err.Number = 0 Then
                WScript.Echo "Done removing ReuseSessionForDifferentHostHeader, saved!"
            End If
        End If
    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

ReuseSessionForDifferentHostHeader

Typically, you may experience the error that this article describes when the ISA server is unable to contact the published Web server.

This hotfix addresses a very specific scenario. Before you apply this hotfix, check the basic connectivity from the ISA server to the published server. For example, check name resolution, TCP connectivity, and then use one of the suggested workarounds to confirm the problem.

STATUS

Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.

Modification Type:MajorLast Reviewed:8/22/2006
Keywords:kbQFE kbprb KB917265 kbAudITPRO