Ограниченная отправка метода 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
описано здесь.