Подтвердить что ты не робот

Как добавить CORS-заголовки на статический сервер подключения?

Я пишу небольшой демонстрационный веб-сервер, предоставляющий статические html, css и javascript. Сервер выглядит как

(function () {
    "use strict";

    var http = require("http");
    var connect = require('connect');
    var app = connect()
        .use(connect.logger('dev'))
        .use(connect.static('home'));

    var server = http.createServer(app);
    server.listen(9999, function () {
        console.log('server is listening');
    });
})();

Мой клиентский javascript делает ajax-вызовы на другом сервере. Как я могу добавить

Access-Control-Allow-Origin: http://example.com

для моего ответа на сервер, так что javascript на стороне клиента может выполнить вызов ajax?

4b9b3361

Ответ 1

Было немного проблем с этим, так как express испортил меня.

Взгляните на включить cors. В основном, что вам нужно сделать, добавьте Access-Control-Allow-Origin в домен, который вы хотите включить. response.setHeaders идеально подходит для этой задачи.

Еще одна вещь, которую следует отметить, заключается в том, что соединение не имеет возможности обрабатывать маршруты. Если ваше приложение должно иметь разные маршруты, вам, вероятно, придется писать логику для каждого из них и добавлять заголовки заголовков в те, на которых вы хотите включить cors. Вы можете использовать req.url для этого.

var http = require("http");
var connect = require('connect');

var app = connect()

    .use(connect.logger('dev'))

    .use(connect.static('home'))

    .use(function(req, res){

    res.setHeader("Access-Control-Allow-Origin", "http://example.com");
    res.end('hello world\n');

 });

var server = http.createServer(app);

server.listen(9999, function () {

    console.log('server is listening');
});

Это ответ, который я получил в инструментах chrome dev

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.com
Date: Sat, 15 Jun 2013 16:01:59 GMT
Connection: keep-alive
Transfer-Encoding: chunked

Ответ 2

Надеюсь, это поможет:

//CORS middleware
var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', config.allowedDomains);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');

    next();
}

//...
app.configure(function() {

    app.use(allowCrossDomain);
    app.use(express.static(__dirname + '/public'));
});

Подробнее: Как разрешить CORS?

Ответ 3

Самый простой способ, если вы используете gulp, - использовать плагин gulp под названием "gulp -connect" и "connect-modrewrite" и определить новый gulptask для перенаправления определенного api. Это должно сделать apache действовать как прокси для конкретного api, чтобы обойти запрос перед полетом, чтобы избежать проблемы с COR. Для решения этой проблемы я использовал следующую задачу gulp.

var connect = require('gulp-connect'),
    modRewrite = require('connect-modrewrite');
/**
* Proxy Config
*/
gulp.task('connect', function () {
  connect.server({
    root: ['./.tmp', './.tmp/{folderLocations}', './src', './bower_components'],
    port: 9000,
    livereload: true,
    middleware: function (connect, opt) {
      return [
        modRewrite([
          '^/loginProxy/(.*)$ http://app.xyzdomain.com/service/login/auth/$1 [P]'
        ])
      ];
    }
  });
});

Ответ 4

express.static принимает объект конфигурации. Вы можете предоставить свойство setHeaders, и из этой функции вы можете установить заголовки для ответа:

    app.use(express.static('public', {
      setHeaders: function setHeaders(res, path, stat) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Methods', 'GET');
        res.header('Access-Control-Allow-Headers', 'Content-Type');
      }
    }))

Параметры этой функции:

  • res, объект ответа.
  • path, путь к файлу, который отправляется.
  • stat, объект stat отправленного файла.

Я хочу, чтобы запрос был доступен здесь, чтобы я мог условно установить заголовки CORS на основе заголовка Origin.