A restrição de compartilhamento de recursos de origem cruzada é um grande problema para o código Javascript de front-end que tenta interagir com APIs em outros domínios.
No que diz respeito a qualquer generalização contundente, isso é verdade:
Se você estiver construindo uma API RESTful, habilite a política CORS mais permissiva para ser adequada ao código Javascript de front-end.
Isso é muito melhor do que gastar tempo implementando JSONP, já que o CORS agora é compatível com todos os principais navegadores.
Os cabeçalhos que você deseja definir em sua resposta:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,OPTIONS,HEAD,PUT,POST,DELETE,PATCH
Access-Control-Allow-Headers: origin, x-http-method-override, accept, content-type, authorization, x-pingother, if-match, if-modified-since, if-none-match, if-unmodified-since, x-requested-with
Access-Control-Expose-Headers: tag, link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes
É assim que você escreve o middleware Connect.js correspondente para Node.js:
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,OPTIONS,HEAD,PUT,POST,DELETE,PATCH');
res.header('Access-Control-Allow-Headers', 'origin, x-http-method-override, accept, content-type, authorization, x-pingother, if-match, if-modified-since, if-none-match, if-unmodified-since, x-requested-with');
res.header('Access-Control-Expose-Headers', 'tag, link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes');
next();
};
module.exports = function allowCORS() {
return allowCrossDomain;
};
Para PHP / Zaphpa: https://github.com/zaphpa/zaphpa/blob/master/plugins/ZaphpaCORS.class.php