【问题标题】:http request declared as deflate does not work声明为 deflate 的 http 请求不起作用
【发布时间】:2014-03-19 21:59:21
【问题描述】:

我想发出一个包含压缩负载数据的 HTTP 请求。

HttpContent 类的实现如下所示:

public class DeflateJsonContent<T> : HttpContent
{
    private readonly MemoryStream _sink = new MemoryStream();

    public DeflateJsonContent(T model)
    {
        Headers.ContentType = new MediaTypeHeaderValue("application/json");
        Headers.Add("Content-Encoding", "deflate");

        using(var deflate = new DeflateStream(_sink, CompressionMode.Compress, true))
        {
            Json.Serialize(deflate, model, true);
        }

        _sink.Seek(0, SeekOrigin.Begin);
    }

    protected override Task SerializeToStreamAsync(Stream destination, TransportContext context)
    {
        return _sink.CopyToAsync(destination);
    }

    protected override bool TryComputeLength(out long length)
    {
        length = _sink.Length;
        return true;
    }

    protected override void Dispose(bool disposing)
    {
        _sink.Dispose();
        base.Dispose(disposing);
    }
}

请求如下所示:

    private Task<HttpResponseMessage> PostDeflateJsonContentAsync(string uri, HttpContent content, CancellationToken token)
    {
        return _http.PostAsync(uri, content, token);
    }

使用 Fiddler 检查通信时,我发现请求标头中没有“放气”。此外,Fiddler 并没有说请求有效负载是压缩的。

我错过了什么吗?

【问题讨论】:

  • +1 用于正确处理MemoryStream

标签: c# http request deflate


【解决方案1】:

您的客户也需要发送正确的接受标头以进行放气;这不仅仅是服务器端的事情。请参阅维基百科页面:http://en.wikipedia.org/wiki/HTTP_compression

【讨论】:

  • 很抱歉,您的回答不是我想要的。我想知道如何使请求压缩工作。这里不感兴趣解压缩压缩响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 2016-10-23
  • 2018-04-24
相关资源
最近更新 更多