使用 HttpRequest.getString(url) 时出现 CORS 错误

CORS error when using HttpRequest.getString(url)

整个应用程序是用 Angular 2Dart 构建的。

在一个地方,我有一个服务,它有一个非常简单的 HttpRequest.getString() 调用,没有特殊参数或任何东西。

String response =  await HttpRequest.getString(url);

在服务器端有一个 Wordpress 安装 WP-API 运行。

似乎 Dart 正在为当前加载的主机名创建 新响应 header,因为我收到此错误:

XMLHttpRequest cannot load http://my-wordpress/wp-json/wp/v2/pages.

The 'Access-Control-Allow-Origin' header contains multiple values 'http://localhost:8080, *', but only one is allowed. Origin 'http://localhost:8080' is therefore not allowed access.


我没有得到与 Postman 相同的结果,但是:


根据我可以从源代码中读取的内容,Dart itself concatenates duplicate headers into just one,但是我找不到关于那个额外的 CORS 的任何信息 header。

我可以通过注释掉 Wordpress 特定的 REST-API 代码来修复它。 在文件夹 wp-includes 中有一个名为 rest-api.php 的文件。

在第 376 行以上,您会看到类似这样的内容:

header( 'Access-Control-Allow-Origin: ' . esc_url_raw( $origin ) );
header( 'Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE' );
header( 'Access-Control-Allow-Credentials: true' );

这似乎允许请求的主机访问 API。但是由于我已经将 * 添加为 Origin,所以这将失败。所以我只是评论说代码被屏蔽了,现在一切正常。