当前位置: 首页 > 知识库问答 >
问题:

AWS S3静态站点CORS jquery ajax POST到API网关

阎英朗
2023-03-14

我们有一个位于S3上的静态web站点。
从页面中,我们执行一个jquery ajax post到AWS api Gateway/lambda函数。
我不确定选项是如何工作的,但当我们启用“Chrome allow cross origin插件”时,所有工作都很好(我们得到了JSON响应),
当插件被禁用时,我们得到错误“Request header field access-control-allow origin is not allow by access-control-allow headers in preflight response”
有没有可能在没有插件的情况下执行post并得到一个成功的响应,我们也启用了API网关上的CORS。

这是AJAX的帖子

$.ajax({
type: 'POST',
url: API_URL,
data: JSON.stringify(inputdata),
dataType: 'json',
 beforeSend: function(xhr) {
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.setRequestHeader("Access-Control-Allow-Methods", "OPTIONS,POST");
xhr.setRequestHeader("Access-Control-Allow-Headers", "X-Requested-With,Access-Control-Allow-Headers,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token");
xhr.setRequestHeader("Content-Type", "application/json");
 //xhr.setRequestHeader("origin", "http://evil.com/");
},
/*
headers: {

        'Access-Control-Allow-Headers':'Access-Control-Allow-Headers,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
        'Access-Control-Allow-Origin' : '*',
        'Access-Control-Allow-Methods' : 'OPTIONS,POST',
        'Access-Control-Allow-Credentials' : true,
        'Content-Type': 'application/json; charset=utf-8'
},*/
crossDomain: true,
success: function (data) {getdatasuccess(data)},
error: function(data){
console.log("error = "+JSON.stringify(data));
}
});

启用“允许交叉起源插件”插件时的响应头

:authority:64j2k6w2dc.execute-api.us-east-1.amazonaws.com
:方法:选项
:路径:/prod
:方案:https
accept:/
accept-encoding:gzip,deflate,br
accept-language:en-us,en;q=0.8
access-control-request-headers:access-control-request-headers,access-control-request-meaders,access-control-request-meaders,access-control-request-methods,access-control-type
access-control-request-methods,;x64)AppleWebKit/537.36(KHTML,像壁虎)Chrome/61.0.3163.100 Safari/537.36

“允许交叉起源插件”插件被禁用时的响应头

:authority:64j2k6w2dc.execute-api.us-east-1.amazonaws.com
:方法:选项
:路径:/prod
:方案:https
accept:/
accept-encoding:gzip,deflate,br
accept-language:en-us,en;q=0.8
access-control-request-headers:access-control-request-meaders,access-control-request-meaders,access-control-request-meaders,access-control-request-meaders,access-control-request-methods,access-control-type mysitetest/htmlpage2.html
用户代理:Mozilla/5.0(Windows NT 6.3;Win64;x64)AppleWebkit/537.36(KHTML,like Gecko)Chrome/61.0.3163.100 Safari/537.36

共有1个答案

松钟展
2023-03-14

它对我有用:

API网关>方法选项>集成响应>头映射:

Access-Control-Allow-Headers:“Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-XSRF-TOKEN,Access-Control-Allow-Headers,Access-Control-Allow-Origin”

 类似资料:
  • 下面的指引都基于以下几个假设: 你正在使用的是默认的构建输出路径(dist)。这个路径 可以使用 build.outDir 更改,在这种情况下,你可以从这篇指南中推断出所需的指令。 Vite 已经被安装为了一个你项目的本地开发依赖(dev dependency),并且你已经配置好了如下的 npm script: 你正在使用 npm,或者使用了 Yarn 或其他的包管理工具,可以运行下面的脚本指令:

  • 使用静态网站构建工具不但可以让我们构建静态网站的工作大大简化,而且还可以迅速验证自己的想法,以最高效的方式开发网站。 这一章中将分别介绍三款流行的开源静态网站构建工具,然后说明为什幺我们选择使用Hugo来构建静态网站。 对比 下面是三款静态网站构建工具的简要对比: 工具名称 开发语言 构建效率 典型用例 特点 jekyll ruby 比较慢 GitHub Pages默认的静态网站构建工具、kube

  • 静态网站构建工具简介 Jekyll简介 Hexo简介 Hugo简介

  • 世界上的网站上千万,网页数量更是如天上的星星数也数不清。那幺这些网站都是如何构建的?都包括哪些类型呢?笼统的概括世界上的网站分为两种类型: 静态网站:仅提供展示功能,不能与用户交互,不需要后端数据库存储用户信息 交互式网站:需要与用户交互,保存用户信息 大多数现代Web应用程序使用层叠样式表(CSS)、JavaScript、图片甚至是特殊的字体和字形库,如Awesome字体,这也是我们工具箱中最常

  • 我正在为我的YouTube频道创建一个网站,因为我为YouTube等制作音乐。 我想知道如何才能为我的网站添加一个mp3播放器,而不是在每次重新加载页面时停止播放。 我想让mp3播放器不断播放,不管它上多少页。 有人能告诉我怎么做吗?谢谢:)

  • 当我的网站 https://jimmysong.io 没有开启 https 的时候,打开网站经常能看到各种莫名其妙的广告。实在受不了无耻的运营商劫持,如下图: 总是在我的网站页面上植入广告,尤其是在微信中打开我的网站链接然后选择在浏览器中打开的时候,最近总是植入广告,迫不得已我要开启https。 因为是用的是 Github Page,启用了自定义域名就无法再在Github中配置开启https,只能