Первая проблема (как упомянуто Brent M Spell) - неправильная позиция заголовка.Во-вторых, вы не используете GZipStream должным образом.Для этого потока требуется запись в «верхний» поток, то есть пустой поток (вы заполняете его буфером).Имея пустой «верхний» поток, все, что вам нужно сделать, это написать в GZipStream ваш буфер.В результате поток памяти будет заполнен сжатым содержимым.Так что вам нужно что-то вроде:
byte[] buffer = ....;
using (var ms = new MemoryStream())
{
using (var zip = new GZipStream(ms, CompressionMode.Compress, true))
zip.Write(buffer, 0, buffer.Length);
buffer = ms.ToArray();
}
response.AddHeader("Content-Encoding", "gzip");
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);