我的应用程序正在运行免费的 hobby-dev 程序和免费的 hobby-dev 数据库(https://orandno.herokuapp.com/Files)。
如果我在 POST 正文中发送一个小文件一切正常,但如果文件很大,我会收到错误 H18 - 服务器请求中断。
我在服务器端的 golang 代码现在几乎什么都不做:
func DBUploadFile(c *gin.Context) { c.JSON(200, gin.H{"已上传": "确定"}) 返回 }
Heroku 工作人员写信给我“上传的文件大小没有限制”... 但是为什么会出现H18错误呢?
Heroku 给出了更多可能导致该错误的原因,我建议您阅读该内容以获取更多说明H18 - 服务器请求中断,但是这个 answer 也应该可以解决您的问题。
检查它是否在所有浏览器中都以相同的方式发生,或者是否只有一种浏览器。
就我而言,仅在使用
Chrome时才收到
Server Request Interrupted
消息。但使用 Firefox、Safari、Edge 时则不然。
结果是 Chrome 在
zstd
中发送 Accept-Encoding
,而其他浏览器不发送它。我最终删除了服务器上的 zstd
。
Chrome request header
Accept-Encoding: gzip, deflate, br, zstd
Firefox request header
Accept-Encoding: gzip, deflate, br
我在heroku上使用django,并使用此中间件删除
zstd
:
class RemoveZstdEncodingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
ae = request.META.get('HTTP_ACCEPT_ENCODING', '')
if 'zstd' in ae:
new_ae = ', '.join(enc for enc in ae.split(',') if 'zstd' not in enc)
request.META['HTTP_ACCEPT_ENCODING'] = new_ae
response = self.get_response(request)
return response