Как отправить два ответа на один запрос?
У меня есть HTTP-сервер в Go, в котором, когда клиент запрашивает любой файл, который я использую, используя http.ServeFile
, Мне нужно также отправить имя пользователя и пароль с этим файлом. Для этого я делаю это, сначала отправив ответ с fmt.Fprintf
а потом я делаю http.ServeFile
, Так что это решает цель, но выдает предупреждение "http: лишний ответ. CallEWeader Call". Как решить это.
Обратите внимание: мне нужно отправить имя пользователя и пароль с обслуживаемым файлом.
if r.URL.Path == "/html/home.html" {
fmt.Fprintf(w, `<!DOCTYPE HTML>
<html><div><input id="username" type="hidden" readonly value="%s" />
<br><input id="password" type="hidden" readonly value="%s" /><div>`,
name, password)
http.ServeFile(w, r, r.URL.Path[1:])
}
3 ответа
ОШИБКА:= "http: лишний ответ. Call_WriteHeader". Эта ошибка появляется, поскольку вы не можете отправить два ответа на один запрос.
Лучший способ достичь того, что вы пытаетесь сделать, - это использовать куки. Отправьте данные в виде куки и бинго. Ваша работа будет выполнена без ошибок / предупреждений.
expiration := time.Now().Add(time.Second * time.Duration(1000))
cookie := http.Cookie{Name: "Token", Value: "username", Expires: expiration}
http.SetCookie(w, &cookie)
usercookie := http.Cookie{Name: "usercookie", Value: "username", Expires: expiration}
http.SetCookie(w, &usercookie)
http.ServeFile(w, r, r.URL.Path[1:])
Этот код создаст cookie, и позже вы сможете получить к нему доступ. Это правильный способ достижения того, что вы хотите.
Отправка имени пользователя и пароля является ответом, передача файла также является ответом. Вы не можете отправить два отдельных ответа одновременно. Вы можете отправить объект как ответ, содержащий имя пользователя, пароль и URL-адрес файла на сервере.
Вы просто отправляете только один ответ, но мы можем объединить составные ответы в один с некоторым шаблоном.
Нравится:
{
"username": "xxxx",
"password": "xxxx",
"file": "file uri"
}