Ошибка CORS при использовании HttpRequest.getString(url)

Все приложение построено с Angular 2 для Dart.

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

String response =  await HttpRequest.getString(url);

На стороне сервера есть установка Wordpress с запущенным WP-API.

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

XMLHttpRequest не может загрузить http://my-wordpress/wp-json/wp/v2/pages .

Заголовок «Access-Control-Allow-Origin» содержит несколько значений «http://localhost:8080, *', но допускается только один. Таким образом, доступ к источнику 'http://localhost:8080' запрещен.


Однако я не получаю такого же результата с Postman:

введите здесь описание изображения


Из того, что я смог прочитать в исходном коде, Dart сам по себе объединяет повторяющиеся заголовки в один, но мне не удалось найти никакой информации об этом дополнительном заголовке CORS.


person rinukkusu    schedule 27.07.2016    source источник


Ответы (1)


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

person rinukkusu    schedule 28.07.2016