Почему я продолжаю получать код состояния 403 в запросе http даже после добавления CORS?

0

Когда я пытаюсь сделать запрос HTTP в Angular в интерфейсе моего приложения, я не могу выполнить запрос, поскольку получаю код статуса 403 в запросе предполетной проверки. Я уже установил заголовки в Node.js в фоновом режиме, чтобы разрешить доступ, но я все еще получаю ошибку, как для запросов GET, так и для POST. Я также прочитал несколько ответов здесь, и они в основном говорят, чтобы установить заголовок Access-Control-Allow-Origin как *, но это не сработало.

Вот мой интерфейс:

 $http({
        method : "GET",
        url : "http://localhost:8080/v1/get-mac",
        headers: {
            'Content-Type': "application/json",
            'Authorization': "token"
        }
        }).then(function(response) {
            this.machines = response.data;
        });

И это то, что я сделал в бэкэнд с помощью Express:

app.use(function(req, res, next){
  res.header('Access-Control-Allow-Origin', "*");
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.header('Access-Control-Allow-Methods', 'GET, POST');
  next();
});

Ошибка, которую я получаю в Chrome:

OPTIONS http://localhost:8080/v1/get-mac
  (anonymous function) @ angular.js:12011
  sendReq @ angular.js:11776
  serverRequest @ angular.js:11571
  processQueue @ angular.js:16383
  (anonymous function) @ angular.js:16399
  $eval @ angular.js:17682
  $digest @ angular.js:17495
  $apply @ angular.js:17790
  (anonymous function) @ angular.js:25890
  defaultHandlerWrapper @ angular.js:3497
  eventHandler @ angular.js:3485
XMLHttpRequest cannot load http://localhost:8080/v1/get-mac    
  Response for preflight has invalid HTTP status code 403

Почему это происходит? Уже пробовал много вещей, но я не знаю, почему даже при настройке заголовка ответа он не работает. благодаря

Вот мой app.js:

var server = require(__dirname + '/server.js')();

var app = server.app.express();

app.use(function(req, res, next){
  res.header('Access-Control-Allow-Origin', "*");
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.header('Access-Control-Allow-Methods', 'GET, POST');
  next();
});

app.use(server.app.express.static(server.app.path.join(__dirname, 'views')));
app.use(server.app.morgan('dev'));
app.engine('html', server.app.ejs.renderFile);
app.set('view engine', 'ejs');
app.use(server.app.methodOverride());
app.use(server.app.bodyParser.urlencoded({ extended: false }));
app.use(server.app.bodyParser.json());

server.router(app);

return server.app.http.createServer(app).listen(process.env.PORT || 8080, function() {
  console.log("Server is on, listening on: 8080");
});
  • 2
    Почему код вашего внутреннего сервера отвечает на запрос OPTIONS с 403? Сделайте так, чтобы ваш сервер отвечал на запросы OPTIONS с 200 ответами вместо этого. Вы не показали никакого внутреннего кода, который вызвал бы ответ 403, поэтому я не могу сказать вам, как исправить это в вашем коде.
  • 2
    Другими словами: кажется, вы думаете, что заголовок CORS каким-то образом вызывает ответ 403, но окончательный факт заключается в том, что ответ 403 вызывает сбой CORS. Исправьте код своего сервера, чтобы он не отвечал 403, когда он получает запрос OPTIONS, и ваша ошибка CORS на стороне клиента исчезнет.
Показать ещё 1 комментарий
Теги:
xmlhttprequest
http

1 ответ

-1

Сервер должен отправить ответ "200" на запрос OPTIONS. Поэтому измените код сервера на:

app.use(function(req, res, next){
    res.header('Access-Control-Allow-Origin', "*");
    res.header('Access-Control-Allow-Headers', 'Content-Type,     
                                               Authorization');
    res.header('Access-Control-Allow-Methods', 'GET, POST');
    if(req.method === 'OPTIONS'){
        return res.status(200)
    }
    next();
});
  • 1
    Если запрашиваемый источник отличается от источника текущей страницы, как вы должны указать целевой источник? Если код OP находится на странице на example.com и вы хотите отправить запрос на http://localhost:8080/v1/get-mac , то вам нужно указать, что ваша цель где-то localhost:8080 .
  • 0
    Посмотрите на отредактированный ответ. И ошибка, которую получает Луиз, не с сервера, а с браузера. Браузер не допустит прохождения любого запроса CORS без установленных заголовков.
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню