[編集] ** 問題は、ポート 8888 経由で送信された HTML を傍受している私たちのマシンの何かにあるようです。ポート番号を変更すると問題が解決するようです。これを行う可能性のあるポート 8888 で何が実行されているかは、まだ謎です。**
HTML 応答を返す Owin ハンドラーに奇妙なバグがあります。私はこれだけにそれを取り除いた:
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、および Firefox で調べました)。
ただし、return
ステートメントにブレークポイントを配置し、続行する前にアプリケーションを数秒間そのままにしておくと、応答がgzip され、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 のスキームを誤解していない限り、他に何も邪魔すべきではありません。