我有最简单的HTTP服务器:
package main
import (
"net/http"
)
func handle(w http.ResponseWriter, r *http.Request) {
// Calling http://localhost:10000/test/ will not panic
// Calling http://localhost:10000/test WILL panic
if r.Header.Get("Content-Type") == "" {
panic("No Content-Type header found")
}
}
func main() {
http.HandleFunc("/test/", handle)
err := http.ListenAndServe(":10000", nil)
if err != nil {
panic(err)
}
}
如https://golang.org/pkg/net/http/#ServeMux所示,服务器将同时匹配/test
和/test/
。
但是,不带斜杠的URL不会设置Content-Type
,从而导致上面的代码出现恐慌。我想念什么吗?为什么省略尾部斜杠会导致Content-Type
标头专门消失?其他标题,例如Accept,
Cache-Control
等,仍然显示。
此外,我正在通过邮递员执行这些请求。
似乎默认的http mux使用Postman无法处理的301处理重定向。执行以下CURL命令:
curl -X POST 'http://localhost:10000/test' -H 'Accept: application/pdf' -H 'Content-Type:text/markdown' -w "%{http_code}"
打印301