如果在http.HandlerFunc 函数内发生panic,它不会发送给客户端http 状态码。为什么会这样,如何避免?因为 javascript XMLHttpRequest 在没有接收到 http 状态码时不能正常工作。
对于 http 响应没有状态和主体内容的情况,我们如何编写 ajax 请求?
func main() {
var counter int
http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {
if counter%2 == 0 {
counter++
writer.Write([]byte(time.Now().String()))
} else {
counter++
panic(":(")
}
})
err := http.ListenAndServe(":9999", nil)
if err != nil {
panic(err)
}
}
最佳答案
在这种情况下你不应该使用 panic。 panic 将导致当前运行您的处理程序函数的 go 例程退出而不向响应写入任何不是您想要的内容,而是使用 WriteHeader
方法返回错误代码:
func main() {
var counter int
http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {
if counter%2 == 0 {
counter++
writer.Write([]byte(time.Now().String()))
} else {
counter++
writer.WriteHeader(http.StatusInternalServerError)
}
})
err := http.ListenAndServe(":9999", nil)
if err != nil {
panic(err)
}
}
关于http - 如果http.HandlerFunc函数内部发生panic,则不会发送给客户端http状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001044/