为什么Owin有时会丢弃Content-Encoding?

时间:2016-05-04 06:56:48

标签: c# gzip response owin content-encoding

[编辑] **问题似乎是我们的机器上正在拦截通过端口8888发送的HTML - 改变端口号似乎可以解决问题。在端口8888上运行的可能会执行此操作的内容仍然是一个谜。 **

我的Owin处理程序中有一个最奇怪的错误,它返回一个HTML响应。我把它剥离到了这个:

internal static Task WebUIHandler(IOwinRequest request, IOwinResponse response)
{
    response.ContentType = "text/html";
    var html = ... build an HTML string ...;
    response.Headers["Content-Encoding"] = "gzip";
    response.Write(GZip.CompressUTF8(html));
    return Task.FromResult(0);
}

GZip.CompressUTF8调用是将html字符串压缩为字节数组的实用程序方法(是的,我知道这可以通过流完成,但这不是重点)

当我运行此应用程序时,它所服务的页面似乎是未压缩的(即,以纯文本形式,未经过gzip压缩)并且Content-Encoding标题不存在(我已经在Fiddler4,Chrome和火狐)。

然而,如果我在return语句上放置一个断点并让应用程序在继续之前停留几秒钟,那么响应 gzipped并且包含Content-Encoding标题 。但是只有我让它在断点上设置几秒钟:如果我继续太快,对我来说没有gzip。

任何人都可以解释这里发生了什么吗?我很神秘。

[编辑:根据要求,整个"管道":]

using Microsoft.Owin;
using Microsoft.Owin.Hosting;
using Owin;
...
static void Main(string[] args) {
    var startOptions = new StartOptions();
    startOptions.Urls.Add(...url...);
    using (WebApp.Start(startOptions, AppBuilderAction)) {
        ...
    }
}
...
static void AppBuilderAction(IAppBuilder app) {
    var router = new Router();
    router.Add("/", WebUIHandler); // See above.
    ...
    app.Run(router.OwinHandler);
}
...
[Router method]
public Task OwinHandler(IOwinContext context) {
    var request = context.Request;
    var response = context.Response;
    ... find a handler matching request.Path.Value ...
    return handler(request, response);
}

就是这样。除非我误解了Owin计划,否则不会有其他任何阻碍。

0 个答案:

没有答案