Nginx 413 错误没有到达浏览器

Nginx 413 错误没有到达浏览器

我认为我的情况非常类似为什么 413 不能立即刷新到客户端?,缩进的是我的情况不同

我的本地开发服务器因文件上传过大而返回状态 413,并且客户端立即收到这些文件 - 正如我所要求的。我的错误和访问日志都显示了这一点,但大约需要 6 秒,所以我想知道我的浏览器是否正在等待发送图像?然后收到 413 错误?

我的远程服务器是同一版本的 Nginx,并且配置也大致相同,但 413 从未到达浏览器。

错误日志中立即出现一个指示数据过大的错误,而访问日志中没有任何内容。浏览器继续发送数据,30 秒后,访问日志中出现 413 状态(错误日志中再次出现),浏览器超时并出现内部“连接重置”错误。这是我的情况与此问题不同的地方。我仍然立即在 error.log 中收到 (客户端打算发送太大的正文:) 并在 access.log 中收到 (POST /path/to/my/imageupload HTTP/1.1 413),但我也立即收到没有状态的响应(在 Chrome 中,状态为失败或 0)

当我 curl 相同的请求时,我确实得到了 413 错误响应。这与 mgorven 在那篇帖子中的回复相符。

我看到 mgorven 说浏览器在从服务器接收任何内容之前会等待发送所有内容。这就是它不接受 413 的原因吗?有什么解决方法吗?如果我将 keepalive_requests 设置为 0,会破坏任何东西吗?比如上传大图像(小于 5mb)?那么人们如何处理 nginx 413 错误而不显示 nginx 413 错误页面?

同样,当我尝试通过 javascript 上传时,也会发生上述情况。我的应用程序的一部分有一个 Rails 上传器,当它上传一个大文件时,它就会断开连接。但我的本地框显示 nginx 413 错误页面。有什么想法可以解决这个问题并只发送 Json 响应吗?

答案1

环境keepalive_requests不会0破坏任何东西,但它会禁用持久连接(这可能会导致性能下降)。

您可以配置 nginx 来发送 JSON 响应,但请注意,您仍然需要客户端正确运行并在完成发送请求正文之前检查响应。

/var/www/errors/413.json

{"message": "Request Entity Too Large"}

/etc/nginx.conf

location /errors {
    types {
        application/json    json;
        text/html   html;
        text/html   htm;
    }
}

error_page 413 /errors/413.json;

相关内容