dart - dart-server/angulardart 和 CORS 的问题

标签 dart cors angular-dart

我在我的服务器上使用 dart,并使用 angulardart 作为我的客户端。我可以通过我的服务器上的 http.get 请求数据,工作正常 - 但我无法让 POST 工作。

服务器:(服务器使用“开始”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);
});

addCorsHeaders:

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 发布到我的服务器失败:“请求的资源上不存在 'Access-Control-Allow-Origin' header 。因此不允许访问 Origin '127.0.0.1:3030'。”

我还尝试了 Google Chrome 中的高级休息插件来向该 URL 发出 POST 请求。这些请求确实有效。我是否错过了 angulardart POST 请求中的某些内容?服务器和客户端运行在不同的端口上。

最佳答案

我自己也遇到过这个问题。事实证明,某些 CORS 请求需要“预检请求”。 GET 不会,但 POST 会。以下文章详细解释了这一切:

http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server

要点是,对于 POST CORS 请求,客户端首先会向服务器发送“OPTIONS”请求,询问 CORS POST 是否正常。这就是我之前提到的“飞行前请求”。您需要捕获它并回复它,然后才能收到 POST。

我不确定如何使用 Start 框架回答 OPTIONS 请求,但 dartlang 网站有一个关于如何使用 vanilla dart 解决确切问题的教程:

https://www.dartlang.org/docs/tutorials/forms/#handling-options-requests

处理 OPTION 请求的代码(摘自上面的文章):

void handleOptions(HttpRequest req) {
  HttpResponse res = req.response;
  addCorsHeaders(res);
  print('${req.method}: ${req.uri.path}');
  res.statusCode = HttpStatus.NO_CONTENT;
  res.close();
 }

关于dart - dart-server/angulardart 和 CORS 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23915992/

相关文章:

firebase - 为什么文档不存在。但始终 !snapshot.hasData 都是 false

ruby-on-rails - CORS 的 Rails 路由通配

php - CORS 不工作 php

dart - Angular Dart 给出错误 : The getter 'injector$Injector' isn't defined for the class 'self'

dart - 来自组件和/或指令的访问 Controller 方法?

angularjs - ts2dart 会继续维护吗?

dart - 在这种情况下,中心和扩展之间的区别?

javascript - 在 Web API Core 和 Angular JS 中启用 CORS

firebase - 在AngularDart应用程序中集成Firebase身份验证

firebase - 将 firebase_ml_vision 添加到 flutter 引发错误 'Unknown type name ' FIRVisionCloudLabelDetector'