【发布时间】:2017-07-25 09:48:06
【问题描述】:
我有一个接受 POST 请求以触发 Lambda 函数并返回结果的 AWS API 网关。
我已尝试在 API 上启用 CORS。
const url = 'XXX'
@inject(HttpClient)
export class App {
constructor(http) {
http.configure(config =>
config
.useStandardConfiguration()
.withBaseUrl(url)
.withDefaults({
// mode: 'no-cors',
headers: {
'Content-type' : 'application/json'
}
}));
this.http = http;
this.http.fetch('/', { method: 'post', body: {data: 'XXXX'} })
.then(res => res.json())
.then(console.log)
.catch(console.error)
}
结果是:
body:null
bodyUsed:false
headers:Headers
ok:false
status:0
statusText:""
type:"opaque"
url:""
这个我试过了:
- 启用 Lambda 代理
- 启用 CORS
- 使用 OPTIONS 端点进行预检响应。
我什至尝试将 Lambda 函数更改为:
exports.handler = function(event, context, callback) {
callback(null, {"success": true});
}
确保 lambda 函数“有效”(正如在 Cloudwatch 中看到的那样)
【问题讨论】:
-
据我了解 Fetch 规范中的要求,您最终得到
type:"opaque"的唯一方法是请求的response tainting 是opaque。如果请求模式为no-cors,那么最终导致响应污染为opaque的唯一方法是。那么你的代码中真的有mode: 'no-cors'注释掉了吗?如果不是,那么您的代码的其他部分似乎必须将请求模式设置为no-cors。否则你不可能得到type:"opaque"。 -
(您基本上永远不想在获取请求时故意发送
mode: 'no-cors'(除非您可能正在使用 Service Worker 缓存做某事)。例如,如果您这样做,您将无法做到,设置Content-type' : 'application/json'并让它工作。即使当它以其他方式“工作”时,你也只会得到一个响应,即你的 JavaScript 代码除了缓存它之外无法做任何事情。) -
@sideshowbarker 是的,我已经在我的代码中注释掉了
mode: 'no-cors'。
标签: amazon-web-services cors fetch aurelia