Тип содержимого заголовка не устанавливается, если шаблон 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

0 ответов

Другие вопросы по тегам