当ServeMux模式没有结尾斜杠时,未设置标题Content-Type

时间:2019-07-15 19:10:28

标签: go servemux

我有最简单的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

0 个答案:

没有答案