Я провел немало поисков за последние несколько дней, и я не могу заставить это работать должным образом.
Я использую AngularJS и Webapp2 Python (Google App Engine).
Я использую заводской ресурс:
app.factory('facTest', ['$resource', function ($resource) {
return $resource('http://localhost:10080/:route', {}, {
GetTest: { method: 'GET', isArray: false, params: { route: "gettest", user_id: '@user_id' } }
})
}]);
Это отлично работает, однако в WebApp2 мне нужно добавить:
self.response.headers['Access-Control-Allow-Origin'] = '*'
Или у меня похожая проблема.
Моя проблема в том, что я пытаюсь отправить пользовательские заголовки через AngularJS:
$http.defaults.headers.common.Authorization = 'Basic ' + "123454";
Когда я это делаю, я получаю ошибки. Я пытаюсь добавить токен в заголовок перед всеми HTTP-вызовами.
Я попытался добавить это в python WebApp2
self.response.headers['Access-Control-Allow-Headers'] = 'X-Requested-With, Content-Type, X-Codingpedia, Authorization'
self.response.headers['Access-Control-Allow-Methods'] = 'GET, POST, DELETE, PUT, OPTIONS'
Я все еще получаю ту же ошибку.
"ПАРАМЕТРЫ http: // локальный: 10080 / gettest? user_id = 1 405 (метод запрещен) "
"XMLHttpRequest не может загрузить http: // локальный: 10080 / gettest? user_id = 1. Ответ на предполетный запрос не проходит проверку контроля доступа: на запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin» ».
Любая помощь приветствуется. Я не знаю, что еще попробовать.
Заранее спасибо.
Прорыв, достижение, открытие
Я нашел способ заставить его работать. Я больше не использую:
{ method: 'GET', isArray: false,
Вместо этого я использую:
{ method: 'OPTIONS', isArray: false,
В дополнение к коду Python:
def options(self):
Это позволило мне отправлять заголовки авторизации.
Вы должны включить:
def options(self, *args, **kwargs):
self.response.headers['Access-Control-Allow-Origin'] = '*'
self.response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
self.response.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE'
Добавьте это в свой класс, в том числе получите.
Что происходит, так это то, что ваш запрос будет искать варианты. Отсюда и ошибка «ОПЦИИ».