Тип содержимого заголовка не устанавливается, если шаблон 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)
}
}
Сервер будет соответствовать обоим /test
а также /test/
как показывает https://golang.org/pkg/net/http/.
Однако URL без косой черты не будет иметь Content-Type
установить вызывающий панику в коде выше. Я что-то пропустил? Почему удаление косой черты вызывает Content-Type
заголовок конкретно пропадать? Другие заголовки, как Accept,
Cache-Control
и т. д., все еще появляются.
Кроме того, я выполняю эти запросы через почтальона.
Похоже, http mux по умолчанию обрабатывает перенаправление с помощью 301, который не может обработать Postman. Выполнение следующей команды CURL:
curl -X POST 'http://localhost:10000/test' -H 'Accept: application/pdf' -H 'Content-Type:text/markdown' -w "%{http_code}"
печать 301