代码之家  ›  专栏  ›  技术社区  ›  Lemon Kazi

通过curl工作但不通过javascript工作的AWS API网关

  •  0
  • Lemon Kazi  · 技术社区  · 6 年前

    嗨,我正在尝试访问一个AWS API网关,它在curl上工作正常,但不在JS上工作 为CRO政策提供信息。 但从AWS我已经启用了CRO

    $.ajax({
            url: ApiURL,
            type: 'POST',
            dataType: 'json',
            contentType: "application/json",
            data: JSON.stringify(hash),
            async: true,
            crossDomain: true,
            crossOrigin: false,
            headers: {
            'accept': 'application/json',
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Headers': '*',
            'Access-Control-Allow-Methods': 'POST'
            },
    

    curl方法通过Ajax

    $.ajax({
            url: stripTrailingSlash(BASE_URL) + '/contact/send',
            type: 'POST',
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(body),
            async: true,
            headers: {
                'X-CSRF-Token': csrfToken
            },
    

    我的API网关帖子结构如下

    我的lambda反应是这样的

    const response = {
    statusCode: statusCode,
    
     headers:{ 'Access-Control-Allow-Origin' : '*' },
    body: JSON.stringify({
      message: responceMessage,
      input: event,
    }),
    };
    callback(null, response);
    

    进入浏览器时出错

    1 回复  |  直到 6 年前
        1
  •  1
  •   Praveen    6 年前

    它在curl中工作,因为curl不发送选项请求,但每当您发出cors请求时,浏览器都会发送它。

    对选项请求的响应是浏览器用来检查是否允许您调用API的内容。

    当您在API网关中启用CORS时,它将添加以下头文件

    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Headers': '*',
    'Access-Control-Allow-Methods': 'POST'
    

    但是,如果启用代理请求集成,API网关将不再修改添加头的响应。因此,除非lambda函数自己添加这些头,否则它将不起作用。