5
respostas

Erro CORS - Aula 02 #02

Olá

Vi esse tópico e resolveu meu problema na Aula 02 #02 quando o instrutor está criando o 1º $.get: https://cursos.alura.com.br/forum/topico-cors-34833

Porém, minha dúvida é porque o instrutor não precisou descomentar o Access-Control-Allow-Origin e nós precisamos? Foi alguma atualização dos browsers de lá para cá? Fiquei um pouco confuso

5 respostas

Oi, Luiz, tudo bem?

Acredito que o professor tenha subido o servidor comentado para que o aluno possa escolher se irá utilizar a política de segurança de Cors, já que possa ter alunos que não tenha necessidade de utilizar essa segurança na aplicação.

Então, minha dúvida é justamente essa. Porque uns precisam e outros não? Se está na memsa origem, todos deveriam precisar subir com este código

EDIT:

Fiz um teste aqui e, com header Access-Control-Allow-Origin comentado, descobri que utilizando o http://localhost:3000/principal.html não da erro CORS.

Porém, se utilizo file:///C:/.../principal.html ou http://127.0.0.1:3000/principal.html, dá o erro CORS de header missing (CORS header 'Access-Control-Allow-Origin' missing).

Porque isso acontece?

Oi, Luiz, tudo bem?

Quando você está o http://localhost:3000/principal.html e tenta acessar o http://localhost:3000/frases ambos estão na mesma origem, então, não há um problema. Porém, quando abrimos o arquivo diretamente no navegador com o file:///C:/.../principal.html ou como o live-server gerando esse endereço http://127.0.0.1:3000/principal.html a origem não é reconhecida e dá o erro de Cors.

Mas quando utilizamos o código que está no express.js descomentado:

app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});

Caso você abra o arquivo com direto da pasta, no meu caso file:///C:/Users/La%C3%ADs/Documents/alura-typer/public/principal.html, não terá problema, porque você permitiu que todas as origens pudessem fazer requisições ao servidor, isso porque no código acima o uso do asterisco * diz que as origens podem vir de qualquer parte. Um teste que fiz: https://imgur.com/a/QZisqYg

Fazendo a requisição pelo live-server também obtive sucesso no link acima o segundo print é com o endereço http://127.0.0.1:5500/public/principal.html

No final é, se você for fazer o acesso ao servidor pelo localhost:3000 para http://localhost:3000/frases o código que implementa a permissão não é necessariamente necessário (pois a origem é a mesma), mas caso, você utilize outros caminhos como os que comentamos aqui, você precisará permitir que eles possam fazer acesso ao servidor.

Se ficou alguma dúvida é só falar!

Obrigado pela resposta! Descomentando esse código já basta para acessalo na rede? P.ex. do meu celular, utilizando o ip do server?

Oi, Luiz, tudo bem?

Sim, já que você vai permitir que outros caminhos além da origem acessem a aplicação.