Javascript 为什么在OPTIONS请求的状态码为200时,API网关get请求会出现CORS错误?

Javascript 为什么在OPTIONS请求的状态码为200时,API网关get请求会出现CORS错误?,javascript,cors,fetch,aws-api-gateway,requestjs,Javascript,Cors,Fetch,Aws Api Gateway,Requestjs,我试图向连接到lambda函数的AWS API网关端点发出GET HTTP请求 端点和lambda函数在使用postman测试时正常工作,这是合乎逻辑的,因为postman不使用CORS 但是,在chrome上测试firefox时,我发现以下错误: 火狐: 跨源请求被阻止:同源策略不允许读取[url]处的远程资源(原因:CORS标头“访问控制允许源”丢失) 铬: CORS策略已阻止从源“”在[url]获取的访问:请求的资源上不存在“访问控制允许源”标头。如果不透明响应满足您的需要,请将请求的模式

我试图向连接到lambda函数的AWS API网关端点发出GET HTTP请求

端点和lambda函数在使用postman测试时正常工作,这是合乎逻辑的,因为postman不使用CORS

但是,在chrome上测试firefox时,我发现以下错误:

火狐:

跨源请求被阻止:同源策略不允许读取[url]处的远程资源(原因:CORS标头“访问控制允许源”丢失)

铬:

CORS策略已阻止从源“”在[url]获取的访问:请求的资源上不存在“访问控制允许源”标头。如果不透明响应满足您的需要,请将请求的模式设置为“no cors”,以获取禁用cors的资源

但是,如果我查看CORS飞行前请求的响应,我会看到“访问控制允许原点”存在:

HTTP/2.0 200正常
日期:2019年3月12日星期二15:22:57 GMT
内容类型:应用程序/json
内容长度:0
x-amzn-requestid:[x-amzn-requestid]
访问控制允许来源:
访问控制允许标头:内容类型、X-Amz-Date、授权、X-Api-Key、X-Amz-Security-Token
x-amz-apigw-id:[x-amz-apigw-id]
访问控制允许方法:获取、选项
X-Firefox-Spdy:h2

我尝试对我的请求使用和包,并使用以下代码(我将请求调用包装在承诺中,以使用异步等待流,如fetch调用):


提前感谢您的帮助

错误消息显示:

请求的资源上不存在“Access Control Allow Origin”标头

Access Control Allow Origin
标题在实际资源中缺失,而不是对飞行前选项请求的响应


它需要同时在两个页面上。

内容类型:应用程序/json内容长度:0
-如果不发送任何内容,您的选项响应不应该说它正在发送json。就是这样,非常感谢!我遵循这一点,在这个方法上启用CORS,它成功了。
const getPolicy = (baseUrl, bucketNameTranscribe, fileName, apiKey) => (
    new Promise((resolve, reject) => {
        request({
             url: `${baseUrl}?bucketName=${bucketNameTranscribe}&key=${fileName}`,
             method: "GET",
             headers: {
                 "x-api-key": apiKey
             }
        }, ((error, response) => {
            if (error) {
                reject(error);
            } else if (response.statusCode === 200) {
                resolve(JSON.parse(response.body));
            } else {
                reject(response);
            }
        });
    })
);

const upload = async() {
    const {
        policyUrl,
        bucketNameTranscribe,
        apiKey
    } = awsConfig;
    const fileName = `${Date.now()}.mp3`;
    const req = new Request(
        `${policyUrl}?bucketName=${bucketNameTranscribe}&key=${fileName}`,
         {       
             method: "GET",
             headers: new Headers({
                 "x-api-key": apiKey
             })
         }
    );

    try {
        const response1 = await fetch(req);
        console.log("fetch", response1);
    } catch (error) {
        console.error("errorFetch", error);
    }

    try {
        const response2 = await getPolicy(policyUrl, bucketNameTranscribe, fileName, apiKey);
        console.log("request", response2);
    } catch (exp) {
        console.error("errorRequest", exp);
    }
}