Microsoft KB Archive/308607

From BetaArchive Wiki

Article ID: 308607

Article Last Modified on 4/30/2002



APPLIES TO

  • Microsoft XML Core Services 4.0
  • Microsoft XML Parser 3.0 Service Pack 1
  • Microsoft XML Parser 3.0 Service Pack 2
  • Microsoft XML Core Services 4.0



This article was previously published under Q308607

SYMPTOMS

The ServerXMLHTTP object was introduced in MSXML 3.0 as a powerful way to handle server-to-server communication. When you use ServerXMLHTTP to send a request to an Active Server Pages (ASP) page that redirects the request to another page, ServerXMLHTTP cannot intercept the redirect.

CAUSE

Currently, ServerXMLHTTP does not offer a way to intercept redirects.

RESOLUTION

To work around this problem, you can use the WinHttpRequest component directly. WinHttpRequest is part of WinHTTP 5.0, which is included in the MSXML 4.0 release of the parser. WinHttpRequest is the base of the ServerXMLHTTP object, so it is highly compatible with ServerXMLHTTP, and switching to it is fairly straightforward.

To download the Software Development Kit (SDK) for WinHTTP, see the following Microsoft Developer Network (MSDN) Web site:

The Readme.doc file that the WinHTTP SDK includes contains an example of intercepting redirects.

STATUS

This behavior is by design.

MORE INFORMATION

The SXH_OPTION_URL (numeric value -1) option was added to the SetOption method in ServerXMLHTTP.4.0. This new option permits a client to retrieve the final URL after a redirect, thereby providing a method for the client to verify whether any redirects occurred.

In the following example, ServerXMLHTTP requests an ASP page that redirects the request. The sending page (Sending.asp) uses ServerXMLHttp to send the request to the Redirect1.asp page, as follows:

<%
    dim sxh
    set sxh = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
    sxh.open "POST", "http://webserver1/SXH/redirect1.asp", false
    sxh.send()
    Response.Write "This is from Sending.ASP <BR>"
    Response.Write sxh.getResponseHeader("header1")
%>
                

Redirect1.asp redirects the request to the Redirect2.asp page, as follows:

<%
    Response.AddHeader "header1", "This is header1 from Redirect 1"
        Response.Redirect "http://webserver1/redirect2.asp"
%>
                

Redirect2.asp is as follows:

<%
    Response.AddHeader "header1", "This is header1 from Redirect 2"
%>
                

ServerXMLHTTP executes Redirect2.asp, and then returns the "header1" HTTP header as follows:

"This is header1 from Redirect 2"
                

REFERENCES

For additional information, click the article number below to view the article in the Microsoft Knowledge Base:

299566 HOWTO: Identify HTTP Errors When You Use the ServerXMLHTTP Object


290761 Frequently Asked Questions about ServerXMLHTTP


Keywords: kbprb KB308607