2016-09-16 15 views
0

Kubernetes Clusterのカスタムdefault-httpイメージを実装しようとしています。私が得たものという、今のようKuangnetesのGolangのカスタム404エラーページ

 Any image is permissable as long as: 
    1. It serves a 404 page at/
    2. It serves 200 on a /healthz endpoint 

:私は唯一の2つの要件を持っ

1 package main 
    2 
    3 import (
    4  "fmt" 
    5  "net/http" 
    6  "html/template" 
    7) 
    8 
    9 func main() { 
10  http.HandleFunc("/healthz", healhtzHandler) 
11  http.HandleFunc("/",errorHandler) 
12  http.ListenAndServe(":8000", nil) 
13 } 
14 
15 func healhtzHandler(w http.ResponseWriter, r *http.Request) { 
16  fmt.Fprint(w, "Healthy as fuck") 
17 } 
18 
19 type Person struct { 
20  UserName string 
21 } 
22 
23 func errorHandler(w http.ResponseWriter, r *http.Request) { 
24  w.WriteHeader(404) 
25  t := template.New("fieldname example") 
26  t, _ = t.Parse("<h2>hello {{.UserName}}!</h2>") 
27  p := Person{UserName: "Astaxie"} 
28  t.Execute(w, p) 
29 } 

それここに私の主な目的は、表示することであることを除いて、期待通りにすべての作品クールな404エラーページですので、ブートストラップ、クールなタグなどを使用する必要があります。しかし、このコードでは、常に<pre></pre>タグ内のテンプレートを実行します。

<html> 
<head></head> 
<body> 
<pre style="word-wrap: break-word; white-space: pre-wrap;"> 
&lt;h2&gt;hello Astaxie!&lt;/h2&gt; 
</pre> 
</body> 
</html> 

、それは私がやりたいことのすべてを台無しに。これをどうすれば解決できますか?

答えて

1

このdocumentation for templateに基づいて、 "html/template"の代わりに "text/template"を使用したいと思うかもしれません。

このページには書かれています:HTML /テンプレートで

文脈自動エスケープが安全生産、HTML出力をエスケープ

ながら:

import "text/template" 
... 
t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`) 
err = t.ExecuteTemplate(out, "T", "<script>alert('you have been pwned') /script>") 

Hello, <script>alert('you have been pwned')</script>!

を生成
関連する問題