登录
首页 >  Golang >  Go问答

Google App Engine 上封闭正文的读取无效

来源:stackoverflow

时间:2024-04-08 14:03:38 144浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《Google App Engine 上封闭正文的读取无效》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

在 Google App Engine 上向 Go 网络应用程序提交 POST 时,我收到 500 错误。在GAE日志中,错误是:

http:在关闭的 Body 上读取无效

Web 应用程序中的处理程序从 *http.Request.Body 读取器进行流式传输,并增量写入 http.ResponseWriter

Body 阅读器在完全读取之前被意外关闭。为什么会出现这种情况?


解决方案


按照设计,Go 中的 HTTP/1.x 服务器会在第一次刷新 http.ResponseWriter 后关闭 *http.Request.Body。说明见this GitHub issue

同时读写在理论上是没问题的——从标准的角度来看并没有具体说明——但 Go 不处理它。如果代码在 Body 完全消耗之前开始写入 Response,则 Body 很可能会意外关闭。

为了避免这种情况,您可以:

  • 写入 bytes.Buffer,而不是直接写入 http.ResponseWriter。在确定正文已完全读取后,您可以将缓冲区一次性全部写入响应中,例如使用 bytes.Buffer.WriteToio.Copy。这里是 an example

  • 或者,您可以在写入之前使用 ioutil.ReadAll 读取整个正文。

(在上述两种情况下,内存压力可能比您期望的要大一些,因为传入或传出字节都收集在内存中而不是流式传输,但这似乎是不可避免的。)

(此行为并非 App Engine 所特有。)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>