- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我知道 http.ResponseWriter 的 WriteHeader
方法每个 HTTP 响应只能调用一次,只能有一个响应状态代码,并且只能发送一次 header 。这一切都很好。
问题是,如果 http.ResponseWriter.Write
返回一个错误?正如您在下面看到的那样,我故意强制 panic 以查看如何 httprouter.Router.PanicHandler处理它。正如预期的那样,日志显示 http: superfluous response.WriteHeader call from ...
并且响应为 201
,因为如上所述为时已晚。
package server
import (
"github.com/julienschmidt/httprouter"
"log"
"net/http"
)
func Serve() {
rtr := httprouter.New()
rtr.GET("/", home.Welcome)
handle500(rtr)
err := http.ListenAndServe(":8080", rtr)
if err != nil {
log.Fatalf("server crash")
}
}
func handle500(r *httprouter.Router) {
r.PanicHandler = func(res http.ResponseWriter, req *http.Request, err interface{}) {
res.WriteHeader(http.StatusInternalServerError)
// http: superfluous response.WriteHeader call from line above
}
}
package home
import (
"github.com/julienschmidt/httprouter"
"net/http"
)
func Welcome(res http.ResponseWriter, _ *http.Request, _ httprouter.Params) {
// doing a few bits and building the body
res.Header().Set("Content-Type", "application/json")
res.WriteHeader(201)
_, err := res.Write("body goes here")
if err == nil { // I am doing this deliberately to test 500
panic("assume that something has gone wrong with res.Write and an error occurred")
}
}
最佳答案
无法“覆盖”状态代码,因为它会立即发送到浏览器。
您正在检查 http.ResponseWriter.Write()
的返回值。我不确定这是一个好策略。如果写入响应失败,那么写入更多响应也可能会失败。
记录失败似乎更合适,但我希望大多数失败是连接断开和其他不需要操作的错误。
关于go - 如何处理多余的 response.WriteHeader 调用以返回 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57828645/
我的服务层有如下方法 public ModuleResponse GetModules(ModuleRequest request) { var response = new ModuleRe
我构建的工具栏与大多数工具栏一样,minHeight 设置为 actionBarSize: 但是,如果我删除这个属性,就完全没有区别了。工具栏保持其 actionBarSize,即使我删除菜单并将
我已经为 SVG 和剪辑路径苦苦挣扎了一段时间。 我正在尝试创建一个三 Angular 形剪辑路径,它将覆盖照片以给顶部一个“三 Angular 形”边缘。 我试图实现与照片完全相同的效果,但三 An
我有一个带有 2 个索引的 PostgreSQL 表。其中一个索引涵盖了 website_id 和 tweet_id 列,是一个唯一的 B 树索引。第二个索引只覆盖 website_id 列,是一个非
我是一名优秀的程序员,十分优秀!