多个响应。Go中的WriteHeader调用

我的Go服务器正在处理我首先调用 response.WriteHeader()</ code>的请求 以便为我的回复设置状态代码。 之后,我开始将字节写入响应主体。 如果我在复制字节时浏览器取消了请求,则会收到错误消息:</ p>

 写入tcp [:: 1]:52319:管道破损
</ code > </ pre>

我的代码检测到此错误,然后调用 http.Error()</ code>。 这会再次调用 response.WriteHeader()</ code>。</ p>

这似乎是一个问题,但我不确定。 可以避免吗? 当写入响应正文时发生错误时,如何避免再次调用 response.WriteHeader()</ code>?</ p>

谢谢!</ p>
< / DIV>

展开原文

原文

My Go server is handling requests I first make a call to response.WriteHeader() in order to set the status code for my response. After that I begin writing bytes into the response body. If the browser cancels the request while i'm copying the bytes, I get an error:

write tcp [::1]:52319: broken pipe

My code detects this error, then calls http.Error(). This calls response.WriteHeader() again.

This appears to be a problem, but I'm not sure. Can this be avoided? How do I avoid calling response.WriteHeader() again when an error occurs while writing to to the response body?

Thanks!

dongpinken0498
dongpinken0498 由于似乎没有什么要回答的了,请您回答并接受...
接近 6 年之前 回复
dongying3830
dongying3830 您无法切换。将状态写入HTTP流后,就无法更改。这是根据协议将其发送回客户端的第一件事。
接近 6 年之前 回复
dswwuo1223
dswwuo1223 您如何切换响应状态?在文档中找不到任何内容。
接近 6 年之前 回复
dph6308
dph6308 但是,通常,如果您已经调用WriteHeader,则不应调用Error。即使客户端仍在侦听另一端并且突然发生其他错误,也无法在HTTP中切换响应状态。
接近 6 年之前 回复
douzhicui2209
douzhicui2209 太酷了,我学到了一些东西。+1
接近 6 年之前 回复
dongyukang7006
dongyukang7006 stackoverflow.com/questions/11003692/...
接近 6 年之前 回复
douwen4125
douwen4125 -有道理...处理这种情况的正确方法是什么?
接近 6 年之前 回复
doufu6504
doufu6504 如果客户端已断开连接,尝试响应错误没有任何意义。
接近 6 年之前 回复

1个回答



.WriteHeader()</ code>的调用开始通过网络将响应发送给客户端。 回应一经进行,便无法退回。 您唯一可以做的就是在本地记录错误(让服务器管理员知道),或者只是静默地失败。</ p>

'Error()'函数用于发送错误消息。 完整的HTTP(错误)响应,因此您只能使用它来代替发送自己的响应,而不能只是发送它。</ p>
</ div>

展开原文

原文

The call to .WriteHeader() starts sending the response to the client over the net. Once the response is on its way, there is no way to back. The only thing you can do is to log the error locally (to let the server administrator know) or maybe to just fail silently.

The 'Error()' function is used to send a complete HTTP (error) response, so you can only use this to replace sending your own response, not in addition to it.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐