Microsoft KB Archive/293792

= PRB: Three GET Requests Are Sent When You Retrieve Plug-in Served Content =

Article ID: 293792

Article Last Modified on 5/23/2007

-

APPLIES TO


 * Microsoft Internet Explorer 4.0 128-Bit Edition
 * Microsoft Internet Explorer 4.01 Service Pack 2
 * Microsoft Internet Explorer 4.01 Service Pack 1
 * Microsoft Internet Explorer 4.01 Service Pack 2
 * Microsoft Internet Explorer 5.0
 * Microsoft Internet Explorer 5.01
 * Microsoft Internet Explorer (Programming) 5.01 SP1
 * Microsoft Internet Explorer 5.5

-



This article was previously published under Q293792



SYMPTOMS
When a server returns a document that is handled by a plug-in (such as an Adobe Acrobat PDF file), three requests are made for the document in Internet Explorer versions 4.x and 5, and two requests are made in Internet Explorer version 5.5.

Occasionally, Internet Explorer determines the plug-in type; however, Internet Explorer still displays the broken plug-in icon instead of the document.



CAUSE
The first behavior is by design. When an initial request is sent for the server file, this returns a data stream with a content-type that is handled by a plug-in (not an ActiveX control), and Internet Explorer closes the initial port and sends a new request with userAgent = contype.

The only information that is needed in return from the contype request is the content-type. However, because most developers are unaware of this request style, they treat each GET the same and return the entire document. This is where the second problem can manifest itself. Internet Explorer is hard coded to time out in only 10 seconds if the contype request is not answered. If you are reading large files from disk or opening a database to retrieve the file, you can easily exceed the 10 second time-out limit.

In Internet Explorer 4.x and 5, the browser first generates a GET request to the server. The server responds with the content-type, and the browser looks at the registry to check which application it will invoke. Then the browser generates a second GET request, and, after the server responds with the same content-type, the browser invokes the targeted application inside the browser window. Lastly, the browser sends a third GET request, and this time the browser renders the content of the server file inside the browser and completes the process.

Internet Explorer 5.5 uses the same method but sends two GET requests instead of three.



RESOLUTION
To work around this limitation and to considerably improve the performance of your application, watch for the &quot;contype&quot; userAgent request and only return the content-type.

If possible, configure the plug-in to operate as a helper application instead. Some plug-ins may not work in this mode, but it is a confirmed solution for PDF files and the Adobe Acrobat Reader.

Sample Solution for a PDF File
Access the PDF file through an HTML page that uses the  tag to specify the ActiveX control version of the PDF viewer as follows:        NOTE: This only works if there is a file to specify for the src parameter and does not resolve the problem if the PDF file is sent as a binary stream.



Steps to Reproduce Behavior

 * 1) Request a plug-in readable file from a server (for example, a .pdf file).
 * 2) Use the Network Monitor tool to capture the network traffic.
 * 3) Filter the result by only selecting the HTTP protocol. Notice that three GET requests are generated to retrieve a single PDF file.

