我对Accept-Encoding
感到有些困惑。我有Web服务,它将接受使用POST方法提交的压缩文件。我添加了下面的代码,查找Accept-Encoding: gzip
并解压缩提交的文件。问题在于从互联网浏览器提交的文件。请求标头包含gzip但文件实际上并未压缩。也许有人可以帮助理解如何检测实际压缩的文件?
var httpPostedFile = httpRequest.Files[0];
var contentLength = httpPostedFile.ContentLength;
var buffer = new byte[contentLength];
httpPostedFile.InputStream.Read(buffer, 0, contentLength);
const string acceptEncoding = "Accept-Encoding";
if (httpRequest.Headers[acceptEncoding] != null && httpRequest.Headers[acceptEncoding].Contains("gzip"))
{
buffer = Decompress(buffer);
}
static byte[] Decompress(byte[] gzip)
{
using (var stream = new GZipStream(new MemoryStream(gzip), CompressionMode.Decompress))
{
const int size = 4096;
var buffer = new byte[size];
using (var memory = new MemoryStream())
{
int count;
do
{
count = stream.Read(buffer, 0, size);
if (count > 0)
{
memory.Write(buffer, 0, count);
}
}
while (count > 0);
return memory.ToArray();
}
}
}
答案 0 :(得分:0)
Accept-Encoding指示客户接受的编码。
使用Transfer-Encoding和Content-Encoding指定给定请求的编码,但请注意,这些将始终应用于整个请求主体,而不仅仅是多部分有效负载的一部分。