请求方法显示选项而不是开机自检

Request Method showing OPTIONS instead of POST

本文关键字:开机自检 选项 方法 显示 请求      更新时间:2023-09-26

我正在做一个项目,我将把一个文件上传到s3。我正在使用XMLHttpRequest向s3提交发布请求,它给了我403禁止状态。当我检查我在Firebug中发出的请求时,它显示"请求方法:选项",并且它应该是POST请求。

这是我下面的代码:

function GetXmlHttpObject () {
     var xmlHttp = null;
     try {
       // Firefox, Opera 8.0+, Safari, IE 7+
       xmlHttp = new XMLHttpRequest();
     } catch (e) {
       // Internet Explorer - old IE - prior to version 7
       try {
          xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (e) {
          xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
       }
     }
     return xmlHttp;
    }
function uploadFile() {
    console.log(AWSAccessKeyId);
    var file = document.getElementById('file').files[0];
    var fd = new FormData();
    var key = "events/" + (new Date).getTime() + '-' + file.name;
    fd.append('key', key);
    fd.append('acl', 'public-read'); 
    fd.append('Content-Type', file.type);      
    fd.append('AWSAccessKeyId', AWSAccessKeyId);
    fd.append('policy', policyBase64)
    fd.append('signature', signature);
    fd.append("file",file);
    var xhr = GetXmlHttpObject();
    xhr.upload.addEventListener("progress", uploadProgress, false);
    xhr.addEventListener("load", uploadComplete, false);
    xhr.addEventListener("error", uploadFailed, false);
    xhr.addEventListener("abort", uploadCanceled, false);
    xhr.open('POST', 'https://'+bucket+'.s3.amazonaws.com/', true); //MUST BE LAST LINE BEFORE YOU SEND 
    xhr.setRequestHeader("Content-type","multipart/form-data");
    xhr.send(fd);
  }

我被困在这里。T__T。

您正在触发预检请求。浏览器正在发出 OPTIONS 请求,以确保在发出 POST 请求之前它有权(通过 CORS(访问服务器。

您必须将存储桶配置为支持带有预检请求的 CORS,如 Amazon 自己的文档中所述。