Understanding By-Design Behavior of ISA Server 2006: Buffering and Streaming Web Publishing Rule Content

Introduction

There are some customer issues that are caused because of ISA Server design or standard behavior that is not clearly understood. This article describes by-design behavior that occurs when you are using a Web publishing rule to serve content to external clients.

By-design behavior

 

By design, ISA Server 2006 buffers content published by a Web publishing rule and then sends it back to the client. This is shown by the following diagram.

 

 

Figure 1 – Content buffered and served by a Web publishing rule.

Streaming or Buffering Content

In some circumstances, you may want to enable ISA Server 2006 to stream the content published by a Web server instead of buffering it. This can be controlled by the application hosted on the Web server, as follows:

· If the application uses a Content-length header specifying the size of the message body, then ISA Server 2006 needs to validate the content against the specified length. In this scenario content will be buffered as illustrated in Figure 1. This is expected behavior.

· If the application uses headers with transfer-encoding: chunked (see section 14.40 of RFC 2068), then ISA Server 2006 can stream the content to the requesting client as each chunk is received.

Note: To enable chunked transfer encoding on IIS see Microsoft Knowledge Base article 278998.

Caveat

When you create a Web publishing rule in ISA Server 2006, link translation is enabled by default. With link translation enabled, when ISA Server 2006 receives a response from the Web server it has to process rule translation as packets are received, and send them back to the client. If ISA Server does not have enough data to buffer and translate, the data is held until there is enough to process the URL translation. The content is send it back to the client in chunks. Even using headers with transfer-encoding: chunked, ISA Server 2006 buffers the content and then sends it back to the client. This is expected behavior. The same behavior is expected when you have compression enabled on Web Listener that you are using to publish the server on ISA Server 2006.

To change this behavior you can disable link translation on the Web publishing rule. This ensures that ISA Server 2006 streams the page if the header has transfer-encoding: chunked, and transfers the chunks to the client as received by the Web Server. It is important to emphasize that not all Web Publishing rules need link translation enabled. For more information on link translation, see Link Translation Concepts in ISA Server 2006 at Microsoft TechNet.

To disable compression for a particular listener, go to the General Page, click in Define HTTP Compression Preferences, click in the Return Compressed Data and remove the listener from there.

Yuri Diogenes

Security Support Engineer – ISA Server Team – Microsoft Texas

Rayne Wiselman

Writer – ISA Server User Education Team – Microsoft Haifa