Вы можете использовать http.request для того, чтобы сделать хорошее проксирование и загрузку ресурсов с дублирующими заголовками.
Вот пример экспресс, который будет прослушивать порт 8080, и сделать запрос на определенный сервер с фактически URL, который вы запрашиваете из/кожи/* маршруту:
var http = require('http'),
express = require('express'),
app = express();
app.get('/skin/*', function(req, res, next) {
var request = http.request({
hostname: 's3.amazonaws.com',
port: 80,
path: '/' + req.params[0],
method: req.method
}, function(response) {
if (response.statusCode == 200) {
res.writeHead(response.statusCode, response.headers);
response.pipe(res);
} else {
res.writeHead(response.statusCode);
res.end();
}
});
request.on('error', function(e) {
console.log('something went wrong');
console.log(e);
})
request.end();
});
app.listen(8080);
Для того, чтобы проверить его, запустить его на вашей машине, а затем перейдите по ссылке: http://localhost:8080/skin/nyc1940/qn01_GEO.png
Он загрузит это изображение, проксируя его с Amazon, и вернет его заголовки. Вы также можете настроить заголовки, чтобы предотвратить отправку XML с S3 (когда файл не существует).
Вам не нужно устанавливать какие-либо заголовки, поскольку они проксированы из s3.amazon, и он надежно устанавливает правильные заголовки для вас.
Nor access-control-allow-origin
, поскольку он вам понадобится только в случае запроса AJAX на ресурс из другого доменного имени. Но в любом случае не стесняйтесь изменять response.headers
перед отправкой. Это простой объект (console.log его для тестов).
Как бы обернуть это в app.get, если бы у меня был подкаталог, запрашиваемый как/skin? – lawx
Как и в настройках заголовков, как бы я помещал заголовки, указанные в вопросе в 'writeHead'? – lawx
Я обновил ответ. Пожалуйста, не стесняйтесь играть с ним сами, а не просить код для вас. Приветствия. – moka