为什么浏览器在响应 413 时显示 CORS 错误?

Why browsers display CORS error in case of response 413?

我正在测试将图像文件上传到服务器的 REST Api。

图片太大,超过最大请求体大小,Nginx拒绝并返回响应413(Request Entity Too Large)。

Nginx: error.log

*329 client intended to send too large body: 1432249 bytes, client: xx.xx.xx.xx, server: api.example.com, request: "POST /images HTTP/1.1", host: "api.example.com", referrer: "https://example.com/posts/create"

但是,我发现firefox/chrome控制台说,

Chrome:控制台

Access to XMLHttpRequest at 'https://api.example.com/images' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

CORS和413错误有什么联系吗?此消息来自哪里,为什么?

本例中的问题是错误响应中没有合适的 Access-Control-Allow-Origin,因此发出请求的应用程序无权查看它。也就是说,即使是错误消息也受跨源策略的约束。

此问题与 CORS 无关。如果您修复 413 错误,那么 CORS 错误也会自行修复。 您需要检查为什么会出现 413 错误。图片上传的尺寸更大。您可以使用下面的代码来修复相同的 在启动文件中添加以下代码 -

.UseStartup<Startup>()
        .UseKestrel(options =>
        {
          options.Limits.MaxRequestBodySize = long.MaxValue;
        });

如果仍未修复,则您需要检查服务器仓库中的默认图像大小。通常默认为 1mb。 您可以增加 client_max_body_size。这将解决您的问题。