Ошибка 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.

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

Другие вопросы по тегам