我在golang中有一个http服务器,在其中客户端请求任何文件时,我都使用http.ServeFile()服务。我还需要与此文件一起发送用户名和密码。因此,为此,我首先通过fmt.Fprintf()发送响应,然后再执行http.ServeFile()。 因此,它可以解决目的,但是会发出警告“ http:多余的响应。WriteHeader调用”。如何解决这个问题。
请注意:-我需要在提供的文件中发送用户名和密码。
因此,我尝试使用fmt.Fprintf()向请求编写器发送响应,然后使用http.ServeFile()提供html文件。它既可以达到目的,也可以在golang服务器中发出警告。
错误:=“ http:多余的响应。WriteHeader调用”。
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:])
}
答案 0 :(得分:1)
发送用户名和密码是响应,提供文件也是响应。您不能一次发送两个单独的响应。您可以发送一个对象作为响应,其中包含用户名密码和服务器中文件的URL。
答案 1 :(得分:0)
您仅发送一个答复,但是我们可以将多个部分的答复合并为某种模式。
赞:
db.collection_name.aggregate[{
$addFields : {
childCount : {$size : "$child"}
}
},
{
$unwind : "$child"
},{
$unwind : "$child.grandSon"
},{
$group :{
_id : "$_id",
age : {$first : "$age"},
childCount : {$first : "$childCount"},
grandSonsCount : {$sum : 1},
grandGrandSonsCount : {$sum : {$size : "$child.grandSon.grandGrandSon"}},
grandSonsAgeCount : {$sum : "$child.grandSon.age"},
grandGrandSonAgeCount : {$sum : {$sum : "$child.grandSon.grandGrandSon.age"}}
}
}
]
答案 2 :(得分:0)
错误:=“ http:多余的响应。WriteHeader调用”。 由于您无法为一个请求发送两个响应,因此出现此错误。
实现您想要做的事情的最好方法是使用cookie。以Cookie和Bingo的形式发送数据。您的工作将完成,而不会出现错误/警告。
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,以后您可以访问它。这是实现所需目标的正确方法。