2013-06-15 3 views
20

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

(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?

ответ

16

Если у вас возникли проблемы с этим, с express испортил меня.

Посмотрите на enable cors. В основном, что вам нужно сделать, добавьте Access-Control-Allow-Origin в домен, в который вы хотите включить cors. 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'); 
}); 

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

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 
+0

Большое спасибо, абсолютно идеально! – afx

+0

Рад, что я мог бы помочь :) –

6

Я надеюсь, что это поможет:

//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')); 
}); 

Подробнее: How to allow CORS?

+2

res.header должен быть res.setHeader для подключения промежуточного ПО 2.0 и выше – depthfirstdesigner

2

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

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]' 
     ]) 
     ]; 
    } 
    }); 
}); 
0

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.