去http响应几个标题

时间:2018-06-16 20:58:55

标签: go

如果他键入错误的密码并将其返回到页面,我想要发送给用户警报他是否输入密码。我是这样做的

func sendJSONHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {
        http.ServeFile(w, r, "template/api/api.html")
    } else if r.Method == "POST" {
        r.ParseForm()
        if r.Form["password"][0] == "apiPassword" {
            j := struct {
                Proxies []string
            }{Proxies: code.UP.Proxy}
            w.Header().Set("Access-Control-Allow-Origin", corsAddrSite)
            json.NewEncoder(w).Encode(j)
        } else {

            // here is a problem
            fmt.Fprintln(w, "<script>alert('Wrong Password')</script>")
            http.ServeFile(w, r, "template/api/api.html")

        }
    }
}

但是我得到http: multiple response.WriteHeader calls错误。 怎么做对了?

1 个答案:

答案 0 :(得分:0)

根据HTTP规范,您不能多次写入http.ResponseWriter。

来自go docs https://golang.org/pkg/net/http/#ResponseWriter

要解决您的问题,您可以在模板文件中包含脚本标记,或者创建新模板。您还可以在发送之前添加警报脚本来定制响应。也许有模板文件。

然而,对此问题的正确解决方案可能是在服务的实际html中有更多逻辑,前端应根据状态代码或响应主体显示响应。