【问题标题】:Why browsers display CORS error in case of response 413?为什么浏览器在响应 413 的情况下显示 CORS 错误?
【发布时间】:2020-06-17 14:35:36
【问题描述】:

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

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

Nginx:error.log

*329 客户端打算发送太大的正文:1432249 字节,客户端:xx.xx.xx.xx,服务器:api.example.com,请求:“POST /images HTTP/1.1”,主机:“api. example.com", referrer: "https://example.com/posts/create"

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

Chrome:控制台

从源“https://example.com”访问“https://api.example.com/images”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

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

【问题讨论】:

  • nginx 默认不会为 4xx 错误添加额外的响应头。因此,如果您希望 nginx 在 413 错误中包含 Access-Control-Allow-Origin 响应标头,则需要将 always 参数附加到用于设置标头的指令:add_header Access-Control-Allow-Origin * always。在stackoverflow.com/a/53059844/441757查看答案

标签: nginx cors http-status-code-413


【解决方案1】:

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

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

如果仍然没有修复,那么您需要检查服务器 repo 中的默认图像大小。通常默认为 1mb。 您可以增加 client_max_body_size。这将解决您的问题。

【讨论】:

    【解决方案2】:

    这种情况下的问题是错误响应上没有适当的Access-Control-Allow-Origin,因此发出请求的应用程序没有查看它的权限。也就是说,即使是错误消息也受制于跨域策略。

    【讨论】:

    • 能否请您提供一个为错误设置了较难的配置示例?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2019-05-29
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多