Forum Discussion

James_Wrubel_48's avatar
James_Wrubel_48
Icon for Nimbostratus rankNimbostratus
Mar 06, 2006

Removing Pragma header on https response

I have a very unusual problem that I hope an iRule can solve. Our F5 BigIP does SSL acceleration and load balancing for a pair of servers running Macromedia's Breeze product. We have a custom UI written in Flash that runs on a different server not managed by the F5. The custom UI calls the Breeze API to load and present data. There is an obscure 'bug' in IE that is causing problems, and I wonder if an iRule can provide a workaround.

 

 

The deal is that when a user makes a request for data in the Flash UI, Flash tells IE to go get the data from the Breeze server, which passes through the F5. The F5 returns the data, which is XML, back to IE. IE sees the following headers:

 

 

HTTP/1.0 200 OK

 

Date: Mon, 06 Mar 2006 14:38:30 GMT

 

Expires: now

 

Content-Type: text/xml

 

Set-Cookie:

 

Connection: close

 

Pragma: no-cache

 

Cache-Control: no-cache

 

Server: JRun Web Server

 

 

Because of the expires, pragma, and cache-control headers, IE actually expires the content instead of handing it back to Flash. Microsoft has a patch available for this, but it is far easier for us to try and solve this with an iRule than to get our entire user base to download and isntall a patch.

 

 

So the pseudocode I would like to implement is,

 

 

If request includes the string /api/xml and user-agent = IE, remove header Expires, remove header Pragma, replace header Cache-Control with Cache-Control: no-store

 

 

This rule seems close:

 

http://devcentral.f5.com/weblogs/joe/archive/2005/10/19/1527.aspx

 

 

Here is the Microsoft Support page for this issue:

 

http://support.microsoft.com/kb/815313/

1 Reply

  • Just modifying Joe's blog entry yields this for your requirements:

    
    when HTTP_REQUEST {
      set foundmatch 0
      if { ([HTTP::uri] contains "/api/xml/") and ([HTTP::header "User-Agent"] contains "")} {
        set foundmatch 1
      }
    }
    when HTTP_RESPONSE {
      if {$foundmatch == 1} {
        HTTP::version "1.1"
        HTTP::header remove Pragma
        HTTP::header replace Cache-Control no-store
        HTTP::header remove Expires
      }
    }

    Note that you'll need to replace with what IE typically places in that header. I don't have a sniffer capture of that handy.