Como Configurar CORS e MIME Types para Módulos JavaScript no Seu Servidor

Quando estamos desenvolvendo com módulos JavaScript e trabalhando com diferentes origens (cross-origin), dois desafios comuns surgem: a configuração de CORS (Cross-Origin Resource Sharing) e a correção do erro de MIME type ao carregar módulos. Vamos resolver esses problemas de uma vez!

Problema 1: CORS – Permitir Requisições Entre Diferentes Origens

O CORS é um mecanismo de segurança que permite ou bloqueia requisições feitas por um domínio diferente do seu servidor. Para configurar isso no seu servidor, adicione o seguinte no seu arquivo .htaccess (se estiver usando Apache):

Certifique-se de que o módulo headers está ativado no Apache, se não estiver, ative-o com a2enmod headers

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization"
</IfModule>

Explicação:

  • O Access-Control-Allow-Origin com o valor * permite que qualquer origem possa acessar os seus recursos.
  • O Access-Control-Allow-Methods define os métodos HTTP permitidos.
  • O Access-Control-Allow-Headers permite o uso de cabeçalhos personalizados, como Authorization.

Se estiver usando Nginx, a configuração seria diferente. Adicione ao arquivo de configuração:

types {
    application/javascript js mjs;
}

Essa configuração de CORS é fundamental quando você precisa compartilhar recursos entre diferentes domínios.


Problema 2: Erro de MIME Type ao Carregar Módulos JavaScript

Se você já configurou CORS corretamente, mas ainda está recebendo um erro como:

Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "".

Isso indica que o seu servidor não está configurado para servir os módulos JavaScript corretamente com o tipo MIME adequado. Para resolver isso, você precisa garantir que o servidor envie o tipo MIME correto para arquivos .js e .mjs.

Se você usa Apache:

Adicione essa linha no seu arquivo .htaccess:

<IfModule mod_mime.c>
    AddType application/javascript .js .mjs
</IfModule>

Isso vai garantir que os arquivos .js e .mjs sejam tratados corretamente como módulos JavaScript pelo servidor.

Se você usa Nginx:

No arquivo de configuração do Nginx, adicione:

types {
    application/javascript js mjs;
}

Isso também configura o servidor para tratar .js e .mjs como application/javascript.


Passo Final: Garanta a Tag <script> Correta no HTML

Agora, ao carregar o seu módulo JavaScript no HTML, use a tag <script> com type="module":

<script type="module" src="path/to/your/script.mjs"></script>

Isso vai garantir que o navegador trate o arquivo como um módulo ES6.


Conclusão

Com a configuração adequada de CORS e MIME types, você pode facilmente permitir que o seu servidor aceite requisições de outras origens e que os módulos JavaScript sejam carregados corretamente. Ao implementar isso, você evita os problemas mais comuns que surgem com o uso de módulos e acessos cross-origin.


Dica extra: Não se esqueça de testar sua aplicação localmente com servidores como http-server ou Live Server para garantir que tudo esteja funcionando corretamente antes de subir para produção!

Rolar para cima