Как добавить Access-Control-Allow-Origin в Shiny Server (не профессиональный)? - PullRequest
0 голосов
/ 30 сентября 2019

Доступ к XMLHttpRequest в «http://10.131.12.49:8010/get.me.data?opt=All' от источника» http://localhost:1826' заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Я звоню в HttpRequest через Angular Framework.

Я пробовал с R Shiny - как добавить Access-Control-Allow-Origin: *

но мыНе могу сказать каждому пользователю, чтобы установить конкретное расширение, чтобы использовать это.

Как вы все знаете, блестящий сервер Pro не является открытым исходным кодом, и это будет выходить за рамки бюджета нашего проекта. Так есть ли какое-нибудь постоянное решение, чтобы это исправить?

export class DashboardService {

  private apiUrl = 'http://10.131.12.49:8010/get.me.data?opt=All';

  //jsonp: any;
  constructor(
    // private http: Http, 
    private http:HttpClient,
  ) { }

  CustReport() {  
    return this.http.get(this.apiUrl)
  }

Ожидаемый результат:

[{"AVG_THROUGHPUT":1976.0432,"AVG_DCR":0.0919}]

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

вы не можете изменить сервер. этот подход не сработает, если мы учтем контекст, в котором вы находитесь. Я предлагаю вам использовать ваш бэкэнд в качестве промежуточного программного обеспечения между вашим угловым приложением и сервером Shiney. Для этого вы можете сделать конечную точку в своем бэкэнде, например:

/api/cors?url=http://10.131.12.49:8010/get.me.data?opt=All

0 голосов
/ 30 сентября 2019

Блестящий сервер (не профессиональный) не поддерживает настройку пользовательских заголовков. Таким образом, в этом случае вы можете создать простой http-сервер, который передает ваши запросы на блестящий сервер. А затем используйте http://proxyserver/{path} для вызовов API.

const http = require("http");
const httpProxy = require("http-proxy");

const proxy = httpProxy.createProxyServer({});
const server = http.createServer(function(req, res) {
  res.oldWriteHead = res.writeHead;
  res.writeHead = (statusCode, headers) => {
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.setHeader("Access-Control-Expose-Headers", "*");
    res.setHeader("Access-Control-Allow-Credentials", "true");
    res.setHeader(
      "Access-Control-Allow-Methods",
      "GET, POST, PATCH, PUT, DELETE, OPTIONS"
    );
    res.oldWriteHead(statusCode, headers);
  };

  if (req.method === "OPTIONS") {
    res.writeHead(200);
    res.end();
    return;
  }
  proxy.web(req, res, {
    // Target to Shiny server
    target: "http://10.131.12.49:8010"
  });
});

server.listen(5050);
console.log("listening on port 5050");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...