I'm talking about your "content-disposition" in your HTTP headers, which has become quite useful. Finally, I have managed to come up with a nice little tech tip I can publish without it being a war-and-peace effort to get out to you all. Ok, now remember that people pay me to make things compatible in IE, not Chrome/FF/Safari/blah/blah.. So this seems to work nicely in IE7 and 8.
Recently, I was asked to modify a web app to open dynamically generated spreadsheets/word docs, natively, in their respective applications. Normally, the content would fire up the application but it would render in IE, and it would be a bit of a pain to do things like save it locally after reviewing it, (see screen shot).

It's almost useful, but you can't easily save the data else without starting up the native application manually and copy and pasting. Bit of a pain..
Well, after trawling google with a drift net, I managed to collate something that you may find of value.
Eventually, my trawl led me to Codestore, which is it's own little fountain of knowledge. I found this article where Jake explains how a java agent can do this job quite well and is designed for static files. It's a much more serious solution, and has a bigger scope. But my scope is smaller, and I'm lazy.
I am "ok" with Java, but after a day or two of it, my left eye starts to twitch, so then realise I need to read the signs, and want to achieve something similar but without too much complexity in it's implementation.
A link on Jake's article took me to this little post to generate "downloadable files". But the comment at the end was the key which talks about using "application/download" as the content type and content-disposition like this.
RESPONSE.setHeader('Content-Type', 'application/download')
RESPONSE.setHeader('Content-Length', len(data))
RESPONSE.setHeader('Content-Disposition','attachment;filename=Data.dat')
Now remember that we can control the response header by printing "Content-type" as the first thing the agent outputs. So, with all this in mind you can do
Print {Content-Type:application/download}
Print {Content-Length:} + Str(Len(sContentData))
Print {Content-Disposition:attachment;filename=yourFilenameHere.xls}
Print sContentData
Now, sContentData is a Microsoft Excel spreadsheet in XML format in this example. So this works well for text data. If you put the code above into your agent that you call via an anchor link, it should be alot more intuitive for your users to download the content.

If they select "open" the application will launch natively in it's own application, or you can still save it to a file as you would expect. This blog post by Scott Hanselman talks about all the gotchya's when dealing with IE and file downloads.