我正在生产应用程序中发送一个大型JSON主体(~3MB)(它是一个base64编码文件)。当我发送JSON主体时,Yesod似乎认为这有效:
POST /send-json
Accept: */*
Status: 200 OK 0.000098s
但浏览器没有收到回复,而是获得net::ERR_CONNECTION_RESET
。我已经在Chrome,Safari和Firefox中重现了这一点。
这可能是某个地方的错误,可能是经线或wai?我的期望是,如果Yesod配置为:
maximumContentLength _ _ = Just (10 * 1024 * 1024) -- 10 megabytes
接收大型请求正文应该不是问题。
版本信息:https://gist.github.com/MaxGabriel/10e8a999eabcc9cb566c087978f5c3ac
LTS:LTS-Haskell 9.14
我在这里回复了这个问题:https://github.com/MaxGabriel/large-files。它只是一个简单的模板,只有一个额外的提交:https://github.com/MaxGabriel/large-files/commit/38addf762feaa5cbff19b84821c7980eec10b160。我只是复制一个字符串而不是发送文件,而是创建一个巨大的JSON主体(几兆字节)。
我无法重现在表单中发送二进制文件的问题。
我无法从curl
重现此问题。
编辑:如果我实际使用requireCheckJsonBody
消耗身体,那么问题就会消失。如果我忽略了身体而只是return ()
,那么我就会得到错误。因此,我认为这很可能是Yesod或堆栈中其他地方的错误