From 895c23e2d2ee257afdec323b0e16eee0300851c0 Mon Sep 17 00:00:00 2001 From: Anthony Yeh Date: Wed, 14 Jan 2015 23:01:49 -0800 Subject: [PATCH] Allow Content-Type with charset in apiserver proxy. Fixes #3456 --- pkg/apiserver/proxy.go | 4 +- pkg/apiserver/proxy_test.go | 101 +++++++++++++++++++++++------------- 2 files changed, 67 insertions(+), 38 deletions(-) diff --git a/pkg/apiserver/proxy.go b/pkg/apiserver/proxy.go index edaed7423b9..b765de7de70 100644 --- a/pkg/apiserver/proxy.go +++ b/pkg/apiserver/proxy.go @@ -174,7 +174,9 @@ func (t *proxyTransport) RoundTrip(req *http.Request) (*http.Response, error) { return resp, nil } - if resp.Header.Get("Content-Type") != "text/html" { + cType := resp.Header.Get("Content-Type") + cType = strings.TrimSpace(strings.SplitN(cType, ";", 2)[0]) + if cType != "text/html" { // Do nothing, simply pass through return resp, nil } diff --git a/pkg/apiserver/proxy_test.go b/pkg/apiserver/proxy_test.go index fdc9954af95..4b2ce125b37 100644 --- a/pkg/apiserver/proxy_test.go +++ b/pkg/apiserver/proxy_test.go @@ -52,7 +52,7 @@ func fmtHTML(in string) string { return string(out.Bytes()) } -func TestProxyTransport_fixLinks(t *testing.T) { +func TestProxyTransport(t *testing.T) { testTransport := &proxyTransport{ proxyScheme: "http", proxyHost: "foo.com", @@ -65,40 +65,60 @@ func TestProxyTransport_fixLinks(t *testing.T) { } table := map[string]struct { - input string - sourceURL string - transport *proxyTransport - output string + input string + sourceURL string + transport *proxyTransport + output string + contentType string }{ "normal": { - input: `
kubelet.loggoogle.log
`, - sourceURL: "http://myminion.com/logs/log.log", - transport: testTransport, - output: `
kubelet.loggoogle.log
`, + input: `
kubelet.loggoogle.log
`, + sourceURL: "http://myminion.com/logs/log.log", + transport: testTransport, + output: `
kubelet.loggoogle.log
`, + contentType: "text/html", + }, + "content-type charset": { + input: `
kubelet.loggoogle.log
`, + sourceURL: "http://myminion.com/logs/log.log", + transport: testTransport, + output: `
kubelet.loggoogle.log
`, + contentType: "text/html; charset=utf-8", + }, + "content-type passthrough": { + input: `
kubelet.loggoogle.log
`, + sourceURL: "http://myminion.com/logs/log.log", + transport: testTransport, + output: `
kubelet.loggoogle.log
`, + contentType: "text/plain", }, "subdir": { - input: `kubelet.loggoogle.log`, - sourceURL: "http://myminion.com/whatever/apt/somelog.log", - transport: testTransport2, - output: `kubelet.loggoogle.log`, + input: `kubelet.loggoogle.log`, + sourceURL: "http://myminion.com/whatever/apt/somelog.log", + transport: testTransport2, + output: `kubelet.loggoogle.log`, + contentType: "text/html", }, "image": { - input: `
`, - sourceURL: "http://myminion.com/", - transport: testTransport, - output: `
`, + input: `
`, + sourceURL: "http://myminion.com/", + transport: testTransport, + output: `
`, + contentType: "text/html", }, "abs": { - input: `