浏览器未接收/解释来自Nginx的413响应

浏览器未接收/解释来自Nginx的413响应,nginx,browser,Nginx,Browser,我有一个Angular 2应用程序,它使用ng2文件上传将文件上传到运行Nginx的服务器。当文件太大时,Nginx肯定会发送413,但浏览器(Chrome和Safari)似乎没有捕获/解释它 Chrome控制台错误: XMLHttpRequest cannot load <url>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '<url>' i

我有一个Angular 2应用程序,它使用ng2文件上传将文件上传到运行Nginx的服务器。当文件太大时,Nginx肯定会发送413,但浏览器(Chrome和Safari)似乎没有捕获/解释它

Chrome控制台错误

XMLHttpRequest cannot load <url>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '<url>' is therefore not allowed access. The response had HTTP status code 413.
XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”。响应的HTTP状态代码为413。
Safari控制台错误

XMLHttpRequest cannot load <url>. Origin <url> is not allowed by Access-Control-Allow-Origin.
XMLHttpRequest无法加载。访问控制不允许原点允许原点。
Nginx配置

server {
  listen 80;

  server_name <url>;

  access_log /var/log/nginx/access.log main;

  client_max_body_size 4m;

  location / {
    proxy_pass http://<ip address>:3009;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}
<ip address> - - [11/Oct/2016:17:28:26 +0100] "OPTIONS /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1" 200 4 "<url>" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" "-"
<ip address> - - [11/Oct/2016:17:28:36 +0100] "POST /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1" 413 601 "<url>" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" "-"
2016/10/11 17:28:26 [error] 30847#0: *1489 client intended to send too large body: 34865919 bytes, client: <ip address>, server: <server>, request: "POST /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1", host: "<host>", referrer: "<url>"
服务器{
听80;
服务器名称;
access\u log/var/log/nginx/access.log main;
客户最大车身尺寸4m;
地点/{
代理传递http://:3009;
proxy_http_版本1.1;
代理设置头升级$http\U升级;
代理集头连接“升级”;
代理设置头主机$Host;
代理缓存绕过$http\u升级;
}
}
Nginx访问日志

server {
  listen 80;

  server_name <url>;

  access_log /var/log/nginx/access.log main;

  client_max_body_size 4m;

  location / {
    proxy_pass http://<ip address>:3009;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}
<ip address> - - [11/Oct/2016:17:28:26 +0100] "OPTIONS /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1" 200 4 "<url>" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" "-"
<ip address> - - [11/Oct/2016:17:28:36 +0100] "POST /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1" 413 601 "<url>" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" "-"
2016/10/11 17:28:26 [error] 30847#0: *1489 client intended to send too large body: 34865919 bytes, client: <ip address>, server: <server>, request: "POST /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1", host: "<host>", referrer: "<url>"
-[11/Oct/2016:17:28:26+0100]“选项/属性/57fbab6087f787a80407c3b4/floors HTTP/1.1“200 4”“”Mozilla/5.0(Macintosh;Intel Mac OS X 10_10_5)AppleWebKit/537.36(KHTML,如Gecko)Chrome/53.0.2785.143 Safari/537.36”“-”
--[11/Oct/2016:17:28:36+0100]“POST/properties/57fbab6087f787a80407c3b4/floors HTTP/1.1”413601““Mozilla/5.0(Macintosh;英特尔Mac OS X 10_10_5)AppleWebKit/537.36(KHTML,像Gecko)Chrome/53.0.2785.143 Safari/537.36”
Nginx错误日志

server {
  listen 80;

  server_name <url>;

  access_log /var/log/nginx/access.log main;

  client_max_body_size 4m;

  location / {
    proxy_pass http://<ip address>:3009;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}
<ip address> - - [11/Oct/2016:17:28:26 +0100] "OPTIONS /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1" 200 4 "<url>" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" "-"
<ip address> - - [11/Oct/2016:17:28:36 +0100] "POST /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1" 413 601 "<url>" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" "-"
2016/10/11 17:28:26 [error] 30847#0: *1489 client intended to send too large body: 34865919 bytes, client: <ip address>, server: <server>, request: "POST /properties/57fbab6087f787a80407c3b4/floors HTTP/1.1", host: "<host>", referrer: "<url>"
2016/10/11 17:28:26[error]30847#0:*1489打算发送太大正文的客户端:34865919字节,客户端:,服务器:,请求:“POST/properties/57fbab6087f787a80407c3b4/floors HTTP/1.1”,主机:,引用方:“
调用ng2文件上载错误处理方法时,响应代码为0,标题为空对象


任何帮助都将不胜感激

这似乎是一个老问题,但即便是萨德尔,2019年Firefox&chrome仍不能像你预期的那样处理413。尽管nginx发送了413,但仍将继续处理上载

好的老Safari(我不常说的词)似乎是唯一一款能实现您期望的功能的现代浏览器,如果您发送自定义413错误,它会处理它

关于这个问题,您可以使用Angular来获取文件的大小,并使用简单的端点在发送实际文件之前验证文件是否过大

在JSB中这样做是最好的选择