Pular para o conteúdo principal

📄 CORS

1. Qual é a diferença entre JSONP e CORS?

JSONP (JSON with Padding) e CORS (Cross-Origin Resource Sharing) são duas técnicas para realizar requisições cross-origin, permitindo que páginas web solicitem dados de domínios (sites) diferentes.

JSONP

JSONP é uma técnica mais antiga usada para contornar as restrições da política de mesma origem, permitindo que páginas web solicitem dados de origens diferentes (domínio, protocolo ou porta). Como o carregamento de tags <script> não é restringido pela política de mesma origem, o JSONP funciona adicionando dinamicamente uma tag <script> que aponta para uma URL que retorna dados JSON. A resposta dessa URL é envolvida em uma chamada de função, e o JavaScript na página define essa função antecipadamente para receber os dados.

// client-side
function receiveData(jsonData) {
console.log(jsonData);
}

let script = document.createElement('script');
script.src = 'http://example.com/data?callback=receiveData';
document.body.appendChild(script);
// server-side
receiveData({ name: 'PittWu', type: 'player' });

A desvantagem é que o risco de segurança é maior (pois pode executar JavaScript arbitrário) e suporta apenas requisições GET.

CORS

CORS é uma técnica mais segura e moderna que o JSONP. Ele usa o header HTTP Access-Control-Allow-Origin para informar ao navegador que a requisição é permitida. O servidor configura os headers CORS relevantes para determinar quais origens podem acessar seus recursos.

Se o frontend em http://client.com quiser acessar os recursos de http://api.example.com, api.example.com precisa incluir o seguinte HTTP header na sua resposta:

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

Ou, se permitir qualquer origem:

Access-Control-Allow-Origin: *

O CORS pode ser usado para qualquer tipo de requisição HTTP e é uma forma padronizada e segura de realizar requisições cross-origin.