Golang中针对Kubernetes的自定义404错误页面

时间:2016-09-16 16:51:03

标签: http go kubernetes

我正在尝试为我的Kubernetes群集实现自定义default-http映像。我只有2个要求:

  • 只要符合以下条件,任何图片都是允许的:

    1. 在/
    2. 上提供404页面
    3. 它在/ healthz端点上提供200

截至目前,我得到的是:

  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, "Really healthy")
 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错误页面,所以我需要使用Bootstrap,酷标签等。但是这段代码总是执行{{1}内的模板} tag。

<pre></pre>

它破坏了我想做的一切。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

基于此documentation for template,我认为您可能希望使用“text / template”而不是“html / template”。

那页说:

  

html / template中的上下文自动转换可生成安全的转义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>!