Проблемы AngularJS NodeJS Cors за брандмауэром

У меня есть приложение AngularJS и NodeJS (API). Я уже включил CORS на своем NodeJS, используя библиотеку CORS() nodejs.

Я также включил необходимые заголовки для включения CORS.

У меня проблема с CORS только при доступе к веб-сайту с компьютера моей компании. Он отлично работает с моих персональных компьютеров. Может ли кто-нибудь указать мне, что я делаю неправильно. Любая помощь или предложение, пожалуйста.

Журналы консоли Chrome:

-------------------- Заголовки ---------------------

Общие:

Request URL:www.example.com:81/api/getdata
Request Method:GET
Status Code:503 Service Unavailable
Remote Address:111.111.11.111:81

Заголовки ответа:

 Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
  Connection:close
  Content-Length:973
  Content-Type:text/html; charset=UTF-8
  Expires:Thu, 01 Jan 1970 00:00:00 GMT
  P3P:CP="CAO PSA OUR"
  Pragma:no-cache

Заголовки запроса:

  Accept:application/json, text/plain, */*
  Accept-Encoding:gzip, deflate, sdch
  Accept-Language:en-US,en;q=0.8
  Connection:keep-alive
  Host:www.example.com:81
  Origin:http://www.example.com
  Referer:http://www.example.com/
  User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,   like Gecko) Chrome/56.0.2924.87 Safari/537.36

-------------------- Ответ: --------------------

<html>
 <head>
   <title>Web Page Blocked</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
   <meta name="viewport" content="initial-scale=1.0">
 </head>
 <body bgcolor="#e7e8e9">
 <div id="content">
 <h1>Web Page Blocked</h1>
 <p>Access to the web page you were trying to visit has been blocked in   accordance with company policy. Please contact your 

 system administrator if you believe this is in error.</p>
 <p><b>User:</b>  </p>
 <p><b>URL:</b> www.example.com:81/api/getdata </p>
 <p><b>Category:</b> unknown </p>
 </div>
 </body>
</html>

Ошибка консоли браузера:

XMLHttpRequest не может загрузить http://www.example.com:81/api/getdata . В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к источнику 'http://www.example.com' запрещен. В ответе был код состояния HTTP 503.

------ РЕДАКТИРОВАТЬ ----- Вот cors(), который я прохожу.

app.options('*',cors());

app.use(function (req, res, next){

    res.header("Access-Control-Allow-Origin", "*");
    res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE");
    res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With,Content-type, Accept");

    res.header("Access-Control-Allow-Credentials", true);

    next();

});

person user3479754    schedule 21.03.2017    source источник
comment
Я предполагаю, что ваша компания блокирует порт 81. Ничего общего с вашим приложением.   -  person Duncan    schedule 21.03.2017
comment
Спасибо за ответ, попробую с другим портом.   -  person user3479754    schedule 21.03.2017


Ответы (1)


Это либо проблема с брандмауэром вашей компании, либо проблема с CORS. Попробуйте принять каждое происхождение в модуле CORS:

var express = require('express');
var cors = require('cors')
var app = express();

var corsOptions = {
  origin: '*',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204 
};

app.get('/products/:id', cors(corsOptions), function(req, res, next){
  res.json({msg: 'This is CORS-enabled for every origin.'});
});

app.listen(80, function(){
  console.log('CORS-enabled web server listening on port 80');
});

Теперь вы должны получать заголовки ответов, подобные этому:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json

Если все равно не работает, то порт 81 надо заблокировать.

Другая возможность заключается в том, что прокси-сервер вашей компании удаляет или блокирует некоторые заголовки, что может объяснить, почему Access-Control-Allow-Origin: www.example.com отсутствует в заголовках ваших ответов.

person Stephane Janicaud    schedule 21.03.2017
comment
Спасибо за ответ, попробую ваши советы. - person user3479754; 21.03.2017
comment
Я добавил cors(), как указано выше, но заголовок удаляется брандмауэром. Как мы решаем проблему корреспонденции, когда доступ к вашему веб-сайту осуществляется с компьютеров компании. - person user3479754; 24.03.2017