01 december, 2010

Content-Disposition HTTP-header och Internet Explorer

Skurken i dramat

Ett sätt att tvinga fram "Save as"-dialogen i en webbläsare (för att ladda ner en fil) är att använda Content-Disposition HTTP-headern med "attachment" som värde. Det ser ut såhär:

Content-Disposition: attachment; filename="Filnamn.pdf"

Detta använder vi i det projekt jag jobbar i för tillfället, men igår upptäckte vi att det inte fungerar i IE8. Efter en stunds efterforskning hittade jag denna buggrapport hos Microsoft. Det intressanta i buggrapporten är "This issue occurs if the server sends a "Cache-control:no-store" header or sends a "Cache-control:no-cache" header.". Dessa cache-kontroll headers tillsammans med HTTPS är tydligen ingen bra kombination för Internet Explorer.

I vårt fall sattes headern Cache-Control: no-cache vilket orsakade vårt problem. När denna togs bort fungerade det prima i både IE8 och Firefox. Efter förändringarna ser HTTP-response-headers ut enligt följande:

Cache-Control: max-age=3600
Date: Wed, 01 Dec 2010 12:52:23 GMT
Transfer-Encoding: chunked
Content-Length: 34121
Content-Type: application/pdf
Expires: Wed, 01 Dec 2010 13:52:23 GMT
Last-Modified: Wed, 01 Dec 2010 12:52:23 GMT
Content-Disposition: attachment; filename="Filnamn.pdf"
X-Powered-By: Servlet/2.5 JSP/2.1

Inga kommentarer:

Skicka en kommentar