2017-06-18 20 views
0

私はhttputil.ReverseProxy - > ModifyResponseからプロキシされた応答をgzipしようとしています。 したがって、http.Responseオブジェクトにのみアクセスできます。Golang http.Response gzip writer ERR_CONTENT_LENGTH_MISMATCH

res.Body = ioutil.NopCloser(bytes.NewReader(minified)) 
res.ContentLength = int64(len(minified)) 
res.Header.Set("Content-Length", strconv.Itoa(len(minified))) 
res.Header.Del("Content-Encoding") 

これはうまくいきます。しかし、私がコンテンツをgzipするとき、私はコンテンツ長不一致エラーを取得します。

var buf bytes.Buffer 
gz := gzip.NewWriter(&buf) 
gz.Write(minified) 

readCloser := ioutil.NopCloser(&buf) 
res.Body = readCloser 

res.ContentLength = int64(buf.Len()) 
res.Header.Set("Content-Length", strconv.Itoa(buf.Len())) 
res.Header.Set("Content-Encoding", "gzip") 

誰かが間違っていると言うことができますか? content-lengthは、入力が変更されても常に10です。

答えて

1

あなたはgz投稿者を閉じていません。それは可能性の問題です。 gzip.Writerdocumentationは言う:

終わったときにWriteCloserに閉じる呼び出すために、呼び出し側の責任です。書き込みはバッファリングされ、閉じるまでフラッシュされません。

データを書き終えたら、gz.Close()を追加してください。

関連する問題