Почему не заполнено поле Response этого HTTP-запроса? - PullRequest
0 голосов
/ 06 июня 2018

Комментарий для поля Response в типе http.Request выглядит следующим образом.

// Response is the redirect response which caused this request
// to be created. This field is only populated during client
// redirects.
Response *Response

Однако мне кажется, что это поле не заполняется во время запросов, как это подразумеваетсячто это.Рассмотрим следующий пример:

package main

import (
  "net/http"
  "log"
  "fmt"
)

func handleA(writer http.ResponseWriter, request *http.Request) {
  http.Redirect(writer, request, "/b", http.StatusSeeOther)
}

func handleB(writer http.ResponseWriter, request *http.Request) {
  fmt.Println(request.Response)
}

func main() {
  http.HandleFunc("/a", handleA)
  http.HandleFunc("/b", handleB)
  log.Fatal(http.ListenAndServe(":8080", nil))
}

Если я скомпилирую и выполню этот код и перейду к localhost:8080/a, я перенаправлюсь на localhost:8080/b, и сервер напечатает <nil> на консоли.Но не должно ли это выводить не-nil значение, так как запрос приходит в результате перенаправления?

1 Ответ

0 голосов
/ 06 июня 2018

В вашем примере перенаправление происходит в браузере;сервер не знает, какой ответ вызвал перенаправление.Это поле заполняется при отправке HTTP-запросов из приложения Go;например, если вы используете http.Client для запроса URL-адреса, а ответ представляет собой перенаправление, он генерирует новый Request для URL-адреса перенаправления, а в это Request, Responseполе будет заполнено ответом, который вызвал это перенаправление.

Об этом свидетельствует источник для http.Client: https://golang.org/src/net/http/client.go#L669

...