【问题标题】:Catching async exceptions from CORS request从 CORS 请求中捕获异步异常
【发布时间】:2013-12-10 10:06:05
【问题描述】:

我允许用户通过 ajax 调用从网络服务器授予他们签名的 URL,从而将文件上传到 amazon s3 存储桶。

每隔一段时间,请求就会变得混乱并给我一个 403(至于为什么我不知道)。我尝试在我的 xhr 请求周围捕获块,但没有捕获到这个异常。

看起来像这样

https://bucket.s3.amazonaws.com/hB22C1m9KAll477LWIGx42fTuK4htm?AWSAccess…JKQ6DXF43A&Expires=1385394844&Signature=/OKomeLHinfcDvm30O/9b+9edkw= 403(禁止) bucket.s3.amazonaws.com/hB22C1m9KQ6DXF4TuK4htm?AWSAccessKeyId=AK...Q62CNKF3PC3QLA&Expires=1385394844&Signature=/OKomeLHkplfcDvm30O/9b+9edkw=:1

所以 2 个问题。

  • 是否可以从 CORS 请求中捕获异步异常?
  • 为什么我会被禁止? (我能想到的唯一一件事是 URL 是否过期,但我的超时时间很长,并且在通过 AJAX 从服务器接收到它的那一刻就被使用了)。

【问题讨论】:

    标签: javascript exception amazon-s3 cors


    【解决方案1】:

    如果发出 CORS 请求时出错,XMLHttpRequest 的 onError 处理程序将触发。您不会有任何有用的信息来说明错误发生的原因,但您会知道存在错误。更多详情请参阅以下问题:Is it possible to trap CORS errors?

    至于为什么你会得到一个禁止的错误,这很难知道。您对 url 过期的评估是可能的,特别是如果有时请求花费的时间比预期的要长。

    【讨论】:

      【解决方案2】:

      通过检查 onreadystatechange 事件可以捕获通过 xhr 发送的 CORS 请求的异步异常。

      xhr.onreadystatechange = ƒ(e) {
            if (this.readyState === 4 && this.status === 200) {
              try {
                console.log('good');
              }
              catch (error) {
                alert("There has been an error");
                console.log(error);
                return false;
              }
              callback();
            }
            else if (this.readyState === 4 && this.status !== 200) {
               console.log('There has been an error');
            }
          };
      

      【讨论】:

        猜你喜欢
        • 2014-01-20
        • 1970-01-01
        • 2011-08-12
        • 2013-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多