Предполагается ли, что обработчик заполняет тип содержимого в заголовке ответа HTTP? - PullRequest
0 голосов
/ 20 июня 2020

Обработчик ниже обрабатывает GET запрос без заполнения заголовка http Response:

// ListAll handles GET requests and returns all current products
func (p *ProductHandler) ListAll(rw http.ResponseWriter, r *http.Request) {
    p.l.Println("[DEBUG] get all records")

    prods := data.GetProducts()

    err := data.ToJSON(prods, rw)
    if err != nil {
        // we should never be here but log the error just incase
        p.l.Println("[ERROR] serializing product", err)
    }
}

Обработчик ниже обрабатывает GET запрос, заполняя http Response заголовок:

// ListAll handles GET requests and returns all current products
func (p *ProductHandler) ListAll(rw http.ResponseWriter, r *http.Request) {
    p.l.Println("[DEBUG] get all records")

    rw.Header().Add("Content-Type", "application/json")

    prods := data.GetProducts()

    err := data.ToJSON(prods, rw)
    if err != nil {
        // we should never be here but log the error just incase
        p.l.Println("[ERROR] serializing product", err)
    }
}

Оба случая отлично работают с простым запросом curl.

Для любого http-клиента

Когда нам нужно заполнить заголовок content-type перед отправкой ответа клиенту?

1 Ответ

3 голосов
/ 20 июня 2020

Всегда сначала читайте документацию!

Ответ на этот вопрос четко указан здесь (выделение явно добавлено):

// Если WriteHeader не пока не звонили, пишите звонки // WriteHeader (http.StatusOK) перед записью данных. Если заголовок // не содержит строку Content-Type, Write добавляет набор Content-Type // к результату передачи начальных 512 байт записанных данных в // DetectContentType. Дополнительно, если общий размер всех записанных // данные меньше нескольких килобайт и нет вызовов Flu sh, // Заголовок Content-Length добавляется автоматически.

Чтобы явно ответить на ваш вторичный вопрос:

Когда нам нужно заполнить заголовок content-type?

Каждый раз, когда вы не хотите, чтобы он определялся автоматически. Автоматическое обнаружение c неточно, поэтому обычно не стоит полагаться на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...