Używam programu ASP.NET na serwerze IIS6. Obecnie serwer jest skonfigurowany do kompresowania dynamicznie generowanych treści, głównie w celu zmniejszenia rozmiaru strony pobieranych plików ASPX.ASP.NET/IIS6 - Wyłącz kodowanie kodowane przy użyciu dynamicznie skompresowanej treści?
Po plików ASPX ma następujący fragment kodu, używany do pobierania pliku z bazą danych i wysłać go do użytkownika:
Response.Clear();
Response.Buffer = true;
Response.ContentType = Document.MimeType;
Response.AddHeader("content-disposition", "attachment;filename=\"" + Document.Filename + Document.Extension + "\"");
Response.AddHeader("content-length", Document.FileSizeBytes.ToString());
byte[] docBinary = Document.GetBinary();
Response.BinaryWrite(docBinary);
Samo pobieranie działa idealnie. Jednak osoba pobierająca plik nie otrzymuje paska postępu, co jest niezwykle denerwujące.
Z przeprowadzonych przeze mnie badań wynika, że kiedy IIS ustawia kodowanie transferu na fragmenty podczas kompresji zawartości dynamicznej, co usuwa nagłówek długości treści, ponieważ narusza to standard HTTP1.1.
Jaki jest najlepszy sposób obejścia tego bez wyłączania kompresji dynamicznej na poziomie serwera? Czy istnieje sposób przez ASP.NET, aby programowo wyłączyć kompresję dla tej odpowiedzi? Czy istnieje lepszy sposób na robienie rzeczy?
Nota boczna: wydaje się, że musisz podać nagłówek długości treści, gdy plik, który wyświetlasz, jest plikiem Office 2007/2010. http://stackoverflow.com/questions/5914675/content-length-header-ignored-by-is-6. –