docker - Heroku h18 错误,而我的后端响应 200 到他们的路由器(多部分/表单数据)

标签 docker go heroku

在 Heroku 上部署我的 golang API 时出现错误。 Heroku 检测到断开连接并报告 500 错误,而在日志中我的服务器正确回答了 200。它是带有附加文件的 multipart/form-data 请求,我只是在响应体。

2019-03-01T07:35:29.060814+00:00 app[web.1]: xx.x.xx.x - - [01/Mar/2019:07:35:29 +0000] "POST /v1/fixture/extract/ HTTP/1.1" 200 2133
2019-03-01T07:35:29.413179+00:00 heroku[router]: sock=backend at=error code=H18 desc="Server Request Interrupted" method=POST path="/v1/fixture/extract/" host=xxx.com request_id=28cdf569-2e00-47b8-9989-9280865707c8 fwd="xx.x.xx.x" dyno=web.1 connect=1ms service=352ms status=503 bytes=2280 protocol=https

这是我在没有反向代理的情况下访问本地服务时的 curl :

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> POST /v1/fixture/extract/ HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> accept: application/json
> Content-Length: 154090
> Content-Type: multipart/form-data; boundary=------------------------7a9bb5de3838f429
> Expect: 100-continue
> 
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Fri, 01 Mar 2019 07:44:50 GMT
< Connection: close
< Transfer-Encoding: chunked
< 

我很难找到发生这种情况的原因。

我的 go 函数:

func FixtureExtract(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    json.NewEncoder(w).Encode(ExtractFixture{})
}

最佳答案

错误的原因是我没有使用 multipart/form-data在返回答案之前由客户端发送。

这解决了问题:

func FixtureExtract(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    r.ParseMultipartForm(32 << 20)

    json.NewEncoder(w).Encode(ExtractFixture{})
}

我只需要用 r.ParseMultipartForm(32 << 20) 来解析表单.

关于docker - Heroku h18 错误,而我的后端响应 200 到他们的路由器(多部分/表单数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54940076/

相关文章:

python - Docker 在 Dockerfile 中创建卷并在其上编译应用程序

amazon-web-services - 将 Apache Storm 部署到 AWS 时出错

go - 收到以下错误

Heroku -> GitHub SSH key 问题

amazon-web-services - 为静态 Amazon S3 内容和动态 heroku 内容配置代理的最简单方法

docker - Podman Systemd 的问题与更改 PIDFile 位置

go - golang 编译器何时可以重新排序命令以及同步原语如何影响它?

docker - Golang Docker API - 尾容器日志

node.js - Heroku SSE 请求上的 H15

django - 在 dockerized 项目上运行 Django 迁移