API REST compatível com Javascript com CORS

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