【问题标题】:Restangular sending OPTIONS method before GETGET之前的Restangular发送OPTIONS方法
【发布时间】:2015-12-09 01:15:24
【问题描述】:

我正在使用只接受 GET 方法并限制使用 OPTIONS 的 API。当我在 chrome 中发送请求(通过 --disable-web-security 绕过 cors)时,它会在 GET 方法之前发送 OPTIONS 方法,以防止获取资源。

然而,在 Safari 中,我可以获取资源,因为它只发送一个 GET。我通过离子框架在移动设备上进行测试,但我无法获得资源,我假设 OPTIONS 是造成这种情况的原因。我试过创建一个自定义请求,虽然thisthisthis 和文档会有所帮助,但我没有任何运气。这就是我的代码的样子,我刚开始使用 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;

    });

【问题讨论】:

    标签: javascript angularjs http get restangular


    【解决方案1】:

    您可以尝试拦截响应,如果方法是 OPTIONS 并且请求是针对相关 URL 发出的,请将响应代码修改为 200204

    这里只是一个偏好问题,而不是使用RestangularProvider.addResponseInterceptor,我会在$httpProvider.interceptors 数组中添加一个函数。 Restangular 在底层使用了$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 对象描述为hereresponse.config 描述为here

    【讨论】:

    • 谢谢,但我在客户端工作,无法访问服务器端
    • $http 是 Angular 服务,我给你的代码截取了客户端的响应。
    • 我刚刚注意到,我要去看看它能做什么,我知道我能做到!
    • 似乎通过添加“RestangularProvider.setDefaultHeaders”会导致它在 GET 之前吐出 OPTIONS 所以我在这里提出了另一个问题stackoverflow.com/questions/34171342/…
    • @qizzacious 我不确定我是否为你回答了这个问题。您是否在问如何克服被拒绝的飞行前 OPTIONS 请求?考虑修改问题标题,如果我对这个问题的回答是正确的,请接受。我会看看你的其他问题并尽力提供帮助。
    【解决方案2】:

    我想通了,我从来没有处理过预检问题,就是这样。我刚刚打开浏览器设置为禁用 cors

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 2019-10-18
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      相关资源
      最近更新 更多