Фабрика Angularjs для использования API random.org

Привет, я пытаюсь написать angular factory для использования данных из веб-API random.org. Я использую angular без JQuery. Мое приложение не загружает данные из веб-службы, сигнализируя о некоторых ошибках CORS, код, который я использую, показан ниже. Любой вклад приветствуется:

'use strict';
angular.module('TrueDice.services', [])

/**
 * A simple example service that returns some data.
 */
    .factory('TrueRandomService', function ($http) {



        var xsrf=({
            'jsonrpc': '2.0',
            'method': 'generateIntegers',
            'params': {
                'apiKey': 'd2319b89-8389-4d24-b1eb-4dbd80009153',
                'n': 1,
                'min': 1,
                'max': 6,
                'replacement': true,
                'base': 10
            },
            'id': 27846
        });


        return{
            getRand: function (numberOfDices) {
                return $http({
                    url: 'https://api.random.org/json-rpc/1/invoke',
                    method: 'POST',
                    headers:{'Content-Type':'application/json-rpc'},
                    data: xsrf
                });
            }
        };
    });

Ошибка:

XMLHttpRequest не может загрузить https://api.random.org/json-rpc/1/invoke< /а>. Поле заголовка запроса Content-Type не разрешено Access-Control-Allow-Headers.

Приложение angular размещено в Кордове с конфигурацией:

    <access origin="*" />

person David Karlsson    schedule 11.05.2014    source источник
comment
поддерживает ли API корс в первую очередь?   -  person mpm    schedule 11.05.2014


Ответы (1)


API в https://api.random.org/json-rpc/1/invoke не отвечает с заголовком Access-Control-Allow-Headers: accept, content-type. Поэтому браузер отклоняет запрос CORS.

Вы можете обойти эту проблему с помощью прокси-сервера CORS. Существует несколько проектов, которые вы можете использовать для тестирования (например, cors-anywhere поставляется как нпм-модуль).

Я подготовил демонстрацию, которая показывает это в действии.

Прокси-сервер перенаправляет ваш запрос цели и добавляет в ответ необходимые заголовки CORS, чтобы браузер перестал жаловаться. Когда вы посмотрите на заголовки ответа от прокси, вы узнаете:

Access-Control-Allow-Headers:accept, content-type
Access-Control-Allow-Methods:POST
Access-Control-Allow-Origin:*
Access-Control-Expose-Headers:location,x-request-url,x-final-url
person Sebastian    schedule 11.05.2014