使用 http post flutter web 时出现 XMLHttpRequest 错误
XMLHttpRequest error while using http post flutter web
我在对 API-AWS API 网关进行 HTTP post 调用时遇到此错误 XMLHttpRequest error.
。我当前的流程是 Flutter web -> API gateway -> lambda -> rds.
我知道这个 已经有几个 question-related 但正如其中一个答案所建议的那样,添加一些 headers 以响应 lambda。但它对我不起作用。
经过一些研究,我发现问题与 CORS 有关。现在在 chrome 中禁用 cors 是一个临时修复,并在此 .
中提出建议
我研究后发现的一些其他解决方案建议在我的 API 中启用 cors 并且在前端部分我添加了 headers 但其中 none 有效。
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;
}
解决这个问题的正确方法是什么?
我已经解决了我的问题,但不会删除这个问题,因为这个问题的 well-defined 解决方案不多。
对于使用 flutter web 和 AWS 的 Future 查看器 API-gateway.
- 如果你遇到这个问题,这意味着它来自后端而不是来自 flutter 端
- XMLHttpRequest 错误。是由于 CORS
您必须在 api-gateway 中启用 CORS 的问题的解决方案遵循此 link。
但是如果您使用与 lambda 和 api-gateway 的代理集成,那么在这种情况下启用 CORS 将无济于事,您必须从 lambda 函数的响应中传递 headers。喜欢
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)
};
格式需要相同。另外,一个对我理解整个问题有很大帮助的特定问题是通过问题 link.
的各种答案。
现在我的问题来了,我做错了什么我从前端传递 "Access-Control-Allow-Origin": "*",
并在 API 网关中启用 CORS 也发送类似的 headers 正在创建一个我的问题
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
因此,在将我的函数更改为此后,一切正常
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());
});
}
1- 转到 flutter\bin\cache 并删除名为:flutter_tools.stamp
的文件
2- 转到 flutter\packages\flutter_tools\lib\src\web 并打开文件 chrome.dart。
3- 查找“--disable-extensions”
4- 添加“--disable-web-security”
您的后端表单中一定缺少注释,或者您的 UI 中的映射可能做错了(例如匹配列名)。您还可以使用 swagger 查找错误。
我在对 API-AWS API 网关进行 HTTP post 调用时遇到此错误 XMLHttpRequest error.
。我当前的流程是 Flutter web -> API gateway -> lambda -> rds.
我知道这个
经过一些研究,我发现问题与 CORS 有关。现在在 chrome 中禁用 cors 是一个临时修复,并在此
我研究后发现的一些其他解决方案建议在我的 API 中启用 cors 并且在前端部分我添加了 headers 但其中 none 有效。
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;
}
解决这个问题的正确方法是什么?
我已经解决了我的问题,但不会删除这个问题,因为这个问题的 well-defined 解决方案不多。 对于使用 flutter web 和 AWS 的 Future 查看器 API-gateway.
- 如果你遇到这个问题,这意味着它来自后端而不是来自 flutter 端
- XMLHttpRequest 错误。是由于 CORS
您必须在 api-gateway 中启用 CORS 的问题的解决方案遵循此 link。
但是如果您使用与 lambda 和 api-gateway 的代理集成,那么在这种情况下启用 CORS 将无济于事,您必须从 lambda 函数的响应中传递 headers。喜欢
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)
};
格式需要相同。另外,一个对我理解整个问题有很大帮助的特定问题是通过问题 link.
的各种答案。现在我的问题来了,我做错了什么我从前端传递 "Access-Control-Allow-Origin": "*",
并在 API 网关中启用 CORS 也发送类似的 headers 正在创建一个我的问题
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
因此,在将我的函数更改为此后,一切正常
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());
});
}
1- 转到 flutter\bin\cache 并删除名为:flutter_tools.stamp
的文件2- 转到 flutter\packages\flutter_tools\lib\src\web 并打开文件 chrome.dart。
3- 查找“--disable-extensions”
4- 添加“--disable-web-security”
您的后端表单中一定缺少注释,或者您的 UI 中的映射可能做错了(例如匹配列名)。您还可以使用 swagger 查找错误。