【发布时间】:2014-05-28 15:34:37
【问题描述】:
我在我的服务器上使用 dart 和 angulardart 作为我的客户端。我可以通过我的服务器上的 http.get 请求数据,这工作正常 - 但我无法让 POST 工作。
服务器:(服务器使用“Start”https://github.com/lvivski/start)
//runs at 127.0.0.1:4040:
server.post("/rest/qr").listen((request) {
addCorsHeaders(request.response);
request.payload().then((map) {
print(map);
}).then((_) {
request.response.send("ok");
});
});
客户端(角度):
// runs at http://127.0.0.1:3030
final String _codesUrl = "http://127.0.0.1:4040/rest/qr";
_http.post(_codesUrl, JSON.encode(temp.toMap())).then((HttpResponse response) {
print(response.status);
});
添加CorsHeaders:
void addCorsHeaders(Response res) {
res.header("Access-Control-Allow-Origin", "*, ");
res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");}
这是我的代码。正如我已经说过的,从 angular 到我的服务器的 http.get 确实有效。通过 angular http-service fail 发布到我的服务器:“请求的资源上没有 'Access-Control-Allow-Origin' 标头。因此不允许访问 Origin '127.0.0.1:3030'。”
我还尝试了 Google Chrome 中的高级休息插件来向该 URL 发出 POST 请求。这些请求确实有效。我错过了 angulardart POST 请求中的某些内容吗?服务器和客户端在不同的端口上运行。
【问题讨论】:
-
我前段时间用它来访问一个用 Go 编写的服务器,但我很难让它与
-Allow-Origin", "*, "一起工作,我改用"http://127.0.0.1:3030"。您是否验证了 CORS 请求是否到达您的服务器? -
@GünterZöchbauer 我已经尝试将客户端的 IP 放入源字段。那也失败了。我可以看到客户端发送 POST 请求,但它就像请求根本没有到达服务器一样。有趣的是,我可以通过其他程序向服务器发出请求。顺便说一句,快速回答 Ty。
-
你不应该在你的帖子请求中使用完整的 URL 吗?我假设您的服务器使用的端口与为您的客户端应用程序服务的 DartEditor 集成服务器不同?
-
@GünterZöchbauer 你是对的。这是客户端/服务器的不同端口。请求的 URL 是 "_codesUrl = "127.0.0.1:4040/rest/qr";" 高级 rest 客户端还显示了我在服务器中设置的 CORS-headers。
-
但是您问题中的代码没有显示这一点。能否请您更新问题。
标签: dart cors angular-dart