"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Maneiras de resolver problemas de CORS

Maneiras de resolver problemas de CORS

Publicado em 2024-11-07
Navegar:433

Ways to resolve CORS issues

Para resolver problemas de CORS, você precisa adicionar os cabeçalhos apropriados no servidor web (como Apache ou Nginx), no backend (como Django, Go ou Node.js) , ou nas estruturas de front-end (como React ou Next.js). Abaixo estão as etapas para cada plataforma:

1. Servidores Web

Apache

Você pode configurar cabeçalhos CORS nos arquivos de configuração do Apache (como .htaccess, httpd.conf ou apache2.conf) ou dentro de uma configuração de host virtual específica.

Adicione as seguintes linhas para ativar o CORS:


    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
    Header set Access-Control-Allow-Headers "Content-Type, Authorization"
  • Para aplicar CORS a domínios específicos:
  Header set Access-Control-Allow-Origin "https://example.com"
  • Se credenciais forem necessárias:
  Header set Access-Control-Allow-Credentials "true"

Certifique-se de que o módulo mod_headers esteja ativado. Caso contrário, habilite-o usando:

sudo a2enmod headers
sudo systemctl restart apache2

Nginx

No Nginx, você pode configurar cabeçalhos CORS no nginx.conf ou dentro de um bloco de servidor específico.

Adicione as seguintes linhas:

server {
    location / {
        add_header Access-Control-Allow-Origin "*";
        add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
        add_header Access-Control-Allow-Headers "Content-Type, Authorization";
    }

    # Optional: Add for handling preflight OPTIONS requests
    if ($request_method = OPTIONS) {
        add_header Access-Control-Allow-Origin "*";
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
        add_header Access-Control-Allow-Headers "Authorization, Content-Type";
        return 204;
    }
}
  • Se credenciais forem necessárias:
  add_header Access-Control-Allow-Credentials "true";

Em seguida, reinicie o Nginx:

sudo systemctl restart nginx

2. Estruturas de back-end

Django

No Django, você pode adicionar cabeçalhos CORS usando o pacote django-cors-headers.

  1. Instale o pacote:
   pip install django-cors-headers
  1. Adicione 'corsheaders' a INSTALLED_APPS em seu settings.py:
   INSTALLED_APPS = [
       ...
       'corsheaders',
   ]
  1. Adicione o middleware CORS ao seu MIDDLEWARE:
   MIDDLEWARE = [
       'corsheaders.middleware.CorsMiddleware',
       'django.middleware.common.CommonMiddleware',
       ...
   ]
  1. Defina as origens permitidas em settings.py:
   CORS_ALLOWED_ORIGINS = [
       "https://example.com",
   ]
  • Para permitir todas as origens:
  CORS_ALLOW_ALL_ORIGINS = True
  • Se credenciais forem necessárias:
  CORS_ALLOW_CREDENTIALS = True
  • Para permitir cabeçalhos ou métodos específicos:
  CORS_ALLOW_HEADERS = ['Authorization', 'Content-Type']
  CORS_ALLOW_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']

Vá (Golang)

No Go, você pode manipular o CORS manualmente no manipulador HTTP ou usar um middleware como rs/cors.

Usando o middleware rs/cors:

  1. Instale o pacote:
   go get github.com/rs/cors
  1. Use-o em seu aplicativo:
   package main

   import (
       "net/http"
       "github.com/rs/cors"
   )

   func main() {
       mux := http.NewServeMux()

       // Example handler
       mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
           w.Write([]byte("Hello, World!"))
       })

       // CORS middleware
       handler := cors.New(cors.Options{
           AllowedOrigins:   []string{"https://example.com"}, // Or use * for all
           AllowedMethods:   []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
           AllowedHeaders:   []string{"Authorization", "Content-Type"},
           AllowCredentials: true,
       }).Handler(mux)

       http.ListenAndServe(":8080", handler)
   }

Node.js (Expresso)

No Express (Node.js), você pode usar o middleware cors.

  1. Instale o pacote cors:
   npm install cors
  1. Adicione o middleware em seu aplicativo Express:
   const express = require('express');
   const cors = require('cors');
   const app = express();

   // Enable CORS for all routes
   app.use(cors());

   // To allow specific origins
   app.use(cors({
       origin: 'https://example.com',
       methods: ['GET', 'POST', 'PUT', 'DELETE'],
       allowedHeaders: ['Authorization', 'Content-Type'],
       credentials: true
   }));

   // Example route
   app.get('/', (req, res) => {
       res.send('Hello World');
   });

   app.listen(3000, () => {
       console.log('Server running on port 3000');
   });

3. Estruturas de front-end

Reagir

No React, o CORS é gerenciado pelo back-end, mas durante o desenvolvimento, você pode fazer proxy de solicitações de API para evitar problemas de CORS.

  1. Adicione um proxy ao package.json:
   {
     "proxy": "http://localhost:5000"
   }

Isso fará proxy das solicitações durante o desenvolvimento para seu servidor back-end em execução na porta 5000.

Para produção, o back-end deve lidar com CORS. Se necessário, use uma ferramenta como http-proxy-middleware para ter mais controle.

Próximo.js

No Next.js, você pode configurar o CORS nas rotas da API.

  1. Crie um middleware personalizado para rotas de API:
   export default function handler(req, res) {
       res.setHeader('Access-Control-Allow-Origin', '*'); // Allow all origins
       res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
       res.setHeader('Access-Control-Allow-Headers', 'Authorization, Content-Type');

       if (req.method === 'OPTIONS') {
           // Handle preflight request
           res.status(200).end();
           return;
       }

       // Handle the actual request
       res.status(200).json({ message: 'Hello from Next.js' });
   }
  1. Em next.config.js, você também pode modificar os cabeçalhos de resposta:
   module.exports = {
       async headers() {
           return [
               {
                   source: '/(.*)', // Apply to all routes
                   headers: [
                       {
                           key: 'Access-Control-Allow-Origin',
                           value: '*', // Allow all origins
                       },
                       {
                           key: 'Access-Control-Allow-Methods',
                           value: 'GET, POST, PUT, DELETE, OPTIONS',
                       },
                       {
                           key: 'Access-Control-Allow-Headers',
                           value: 'Authorization, Content-Type',
                       },
                   ],
               },
           ];
       },
   };

Resumo de onde adicionar cabeçalhos:

  • Servidores Web (Apache, Nginx): Configure nos arquivos de configuração do servidor (por exemplo, .htaccess, nginx.conf).
  • Estruturas de back-end:
    • Django: Use cabeçalhos django-cors.
    • Go: adicione cabeçalhos manualmente ou use um middleware como rs/cors.
    • Node.js (Express): Use o middleware cors.
  • Frontend: No desenvolvimento, use configurações de proxy (como proxy do React ou cabeçalhos personalizados Next.js) para evitar problemas de CORS, mas sempre lide com CORS no backend em produção.
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/tikam02/ways-to-resolve-cors-issues-15on?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3