Atu*_*ary 3 amazon-web-services aws-lambda aws-api-gateway flutter flutter-web
我XMLHttpRequest error.在对我的 API-AWS API 网关进行 HTTP post 调用时遇到此错误。我当前的流程是 Flutter web -> API gateway -> lambda -> rds。
我知道已经有几个与此相关的问题,例如,但正如答案之一所建议的,添加一些标头以响应 lambda。但这对我不起作用。
经过一些研究,我发现问题与 CORS 有关。现在禁用 chrome 中的 cors 是一个临时修复,并在这个问题中建议。
我在研究后发现的一些其他解决方案建议在我的 API 中启用 cors,并且在前端部分我添加了标头,但它们都不起作用。
fetchData() async {
String url =
"myUrl";
Map<String, String> headers = {
"Access-Control-Allow-Origin": "*", // Required for CORS support to work
};
String json = '{"emailId":"emailId"}';
http.Response response =
await http.post(Uri.parse(url), headers: headers, body: json);
print(response.body);
return response.body;
}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的正确方法是什么?
小智 10
1- 转到flutter\bin\cache并删除名为:flutter_tools.stamp
2- 转到flutter\packages\flutter_tools\lib\src\web并打开文件chrome.dart。
3-查找'--disable-extensions'
4-添加'--disable-web-security'
我已经解决了我的问题,并且不会删除这个问题,因为这个问题没有很多明确的解决方案。对于使用 flutter web 和 AWS API 网关的未来观众。
要解决此问题,您必须在 api-gateway 中启用 CORS,请点击此链接。
但是如果您使用 lambda 和 api-gateway 的代理集成,那么在这种情况下启用 CORS 不会有帮助,您必须传递 lambda 函数响应的标头。喜欢
return {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*", // Required for CORS support to work
"Access-Control-Allow-Credentials": true, // Required for cookies, authorization headers with HTTPS
"Access-Control-Allow-Headers": "Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale",
"Access-Control-Allow-Methods": "POST, OPTIONS"
},
body: JSON.stringify(item)
};
Run Code Online (Sandbox Code Playgroud)
格式需要相同。另外,一个对我理解整个问题有很大帮助的特殊问题是浏览问题链接的各种答案。
现在我的问题来了,我做错了什么,我 "Access-Control-Allow-Origin": "*",从前端传递并在 API 网关中启用 CORS 也发送类似的标头,这给我带来了问题
Access to XMLHttpRequest at 'API-URL' from origin 'http://localhost:63773' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. //this particular line
Run Code Online (Sandbox Code Playgroud)
所以在将我的功能更改为这个之后,一切都工作得很好
fetchData() async {
String url =
"API-url";
Map<String, String> headers = {
"Content-Type": "text/plain",
};
String json = '{"emailId":"emailId"}';
Map<String, String> map = Map();
map["emailId"] = "fake@gmail.com";
http.Response response = await http
.post(Uri.parse(url), headers: headers, body: jsonEncode(map))
.then((value) {
print("onThen> " + value.body.toString());
}).onError((error, stackTrace) {
print("onError> " +
error.toString() +
" stackTrace> " +
stackTrace.toString());
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17339 次 |
| 最近记录: |