转到 http 响应几个 header

标签 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 错误。 怎样做才是对的?

最佳答案

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

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

要解决您的问题,您可以在模板文件中添加脚本标签,或者制作一个新模板。您还可以通过在发送之前添加警报脚本来定制响应。也许使用模板文件。

然而,解决此问题的正确方法可能是在实际提供的 html 中包含更多逻辑,前端应根据状态代码或响应正文显示响应。

关于转到 http 响应几个 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891697/

相关文章:

http - 无法使用 http.Get in GO 从 nginx 获取完整文件

使用请求与上下文的身份验证

vim - 如何默认(自动)启用 go.vim?

macos - `go get` 因某些 go 包的权限被拒绝而失败

go - 从 Go 中的子函数关闭/返回 ResponseWriter

go - 普罗米修斯直方图矢量 : All buckets fill equally?

go - 使用 go-sql-driver 和 mysql 安全插入查询

go - 为什么在这种情况下 float32 比 float64 更准确?

mongodb - Docker 和 mongo-go-driver "server selection error"

go - 复合词的文件名约定?