从CORS请求中捕获异步异常

Catching async exceptions from CORS request

本文关键字:异步 异常 CORS 请求      更新时间:2023-10-10

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

每隔一段时间,请求就会失控,给我403分(至于为什么我不知道)。我在xhr请求中尝试了catch块,但这个异常没有被捕获。

看起来像这个

https://bucket.s3.amazonaws.com/hB22C1m9KAll477LWIGx42fTuK4htm?AWSAccess…JKQ6DXF43A&过期=1385394844&签名=/OOmeLHinfcDvm30O/9b+9edkw=403(禁止)bucket.s3.amazonaws.com/hB22C1m9KQ6DXF4TuK4htm?AWSAccessKeyId=AK…Q62CNKF3PC3QLA&过期=1385394844&签名=/OKomeLHkplfcDvm30O/9b+9edkw=:1

所以有两个问题。

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

如果发出CORS请求时出错,XMLHttpRequest的onError处理程序将启动。关于错误发生的原因,您没有任何有用的信息,但您会知道存在错误。有关更多详细信息,请参阅以下问题:是否有可能捕获CORS错误?

至于为什么你会犯一个被禁止的错误,这很难知道。您对URL过期的评估是可能的,尤其是如果偶尔一个请求的时间比预期的要长。

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

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');
      }
    };