2016-07-27 8 views
0

Все приложение построено с Angular 2 для Dart.Ошибка CORS при использовании HttpRequest.getString (url)

В одном месте у меня есть сервис с действительно наивным звонком HttpRequest.getString() без особых параметров или чего-либо еще.

String response = await HttpRequest.getString(url); 

На стороне сервера есть Wordpress установка с WP-API работает.

Кажется, что Dart создает новый заголовок ответа для загруженного в данный момент имя хоста как-то, потому что я получаю эту ошибку:

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, хотя:

enter image description here


Из того, что я мог прочитать из исходного кода, Dart itself concatenates duplicate headers into just one, но я не смог найти информацию об этом дополнительном заголовке CORS.

ответ

0

Я мог бы исправить это, комментируя 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, это не удастся. Поэтому я просто прокомментировал, что код блокируется, и теперь все работает нормально.