Ограниченная отправка метода OPTIONS перед GET

Я работаю с API, который принимает только метод GET и ограничивает использование опций. Когда я отправляю запросы в chrome (в обход cors через --disable-web-security) он отправляет метод OPTIONS непосредственно перед методом GET, предотвращая получение ресурсов.

В Safari, однако, я могу получить ресурс, так как он отправляет только GET. Я тестирую на мобильном телефоне через ионную среду, и я не могу получить его, чтобы получить ресурсы, я предполагаю, что причиной этого являются ВАРИАНТЫ. Я пытался создать пользовательский запрос, и хотя это, это, это и документы помогли бы, но мне не повезло. Вот как выглядит мой код, я только начал использовать Restangular и до сих пор разбираюсь в этом, и любая помощь / советы приветствуются. Благодарю.

      .constant('baseURL', {
          url: 'https://api.example.com'
      })

      .config([
  'RestangularProvider', 'baseURL',
  function(RestangularProvider, baseURL) {

    RestangularProvider.setBaseUrl(baseURL.url);


    RestangularProvider.setDefaultHeaders({
      Authorization: 'Basic ' + baseURL.jwt
    })

  }
])


      .controller('MainCtrl', ['$scope', 'Restangular',
          function($scope, Restangular) {

              Restangular.one('destinations').get('').then(function(destinations) {

      $scope.destinationBase = destinations;

    });

2 ответа

Решение

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

Вы можете попытаться перехватить ответ и, если метод был OPTIONS и запрос был отправлен на указанный URL, измените код ответа на 200 или же 204,

Это просто вопрос предпочтений, но вместо использования RestangularProvider.addResponseInterceptor я бы добавил функцию в массив $httpProvider.interceptors. Ограниченное использование $http под капотом, так почему бы не пропустить посредника и не пойти прямо к источнику?

Примерно так должно работать:

angular.module('myApp', ['restangular'])
    .config(httpConfig);

function httpConfig($httpProvider) {
    $httpProvider.interceptors.unshift(interceptor);

    function interceptor() {
        return {
            response: responseInterceptor
        };

        function responseInterceptor(response) {
            if (response.config.url === 'http://my.api.com/endpoint' && response.config.method === 'OPTIONS' && response.status > 299) {
                response.status = 204;
                response.statusText = 'No Content';
            }

            return response;
        }
    }
}

response объект описан здесь, и response.config описано здесь.

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