"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Formas de resolver problemas de CORS

Formas de resolver problemas de CORS

Publicado el 2024-11-07
Navegar:749

Ways to resolve CORS issues

Para resolver problemas de CORS, debe agregar los encabezados apropiados ya sea en el servidor web (como Apache o Nginx), en el backend (como Django, Go o Node.js) , o en los marcos frontend (como React o Next.js). A continuación se detallan los pasos para cada plataforma:

1. Servidores web

Apache

Puedes configurar encabezados CORS en los archivos de configuración de Apache (como .htaccess, httpd.conf o apache2.conf), o dentro de una configuración de host virtual específica.

Agregue las siguientes líneas para habilitar 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 para dominios específicos:
  Header set Access-Control-Allow-Origin "https://example.com"
  • Si se requieren credenciales:
  Header set Access-Control-Allow-Credentials "true"

Asegúrese de que el módulo mod_headers esté habilitado. Si no, habilítelo usando:

sudo a2enmod headers
sudo systemctl restart apache2

Nginx

En Nginx, puede configurar encabezados CORS en nginx.conf o dentro de un bloque de servidor específico.

Agregue las siguientes líneas:

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;
    }
}
  • Si se requieren credenciales:
  add_header Access-Control-Allow-Credentials "true";

Luego reinicie Nginx:

sudo systemctl restart nginx

2. Marcos de backend

Django

En Django, puedes agregar encabezados CORS usando el paquete django-cors-headers.

  1. Instalar el paquete:
   pip install django-cors-headers
  1. Agregue 'corsheaders' a INSTALLED_APPS en su configuración.py:
   INSTALLED_APPS = [
       ...
       'corsheaders',
   ]
  1. Agregue el middleware CORS a su MIDDLEWARE:
   MIDDLEWARE = [
       'corsheaders.middleware.CorsMiddleware',
       'django.middleware.common.CommonMiddleware',
       ...
   ]
  1. Establece los orígenes permitidos en settings.py:
   CORS_ALLOWED_ORIGINS = [
       "https://example.com",
   ]
  • Para permitir todos los orígenes:
  CORS_ALLOW_ALL_ORIGINS = True
  • Si se requieren credenciales:
  CORS_ALLOW_CREDENTIALS = True
  • Para permitir encabezados o métodos específicos:
  CORS_ALLOW_HEADERS = ['Authorization', 'Content-Type']
  CORS_ALLOW_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']

Ir (Golang)

En Go, puedes manejar CORS manualmente en el controlador HTTP o usar un middleware como rs/cors.

Usando el middleware rs/cors:

  1. Instalar el paquete:
   go get github.com/rs/cors
  1. Úsalo en tu aplicación:
   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 (Rápido)

En Express (Node.js), puedes usar el middleware cors.

  1. Instalar el paquete cors:
   npm install cors
  1. Agregue el middleware en su aplicación 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. Marcos de interfaz de usuario

Reaccionar

En React, CORS es manejado por el backend, pero durante el desarrollo, puedes enviar solicitudes de API para evitar problemas de CORS.

  1. Agregue un proxy al paquete.json:
   {
     "proxy": "http://localhost:5000"
   }

Esto enviará las solicitudes durante el desarrollo a su servidor backend que se ejecuta en el puerto 5000.

Para producción, el backend debe manejar CORS. Si es necesario, utiliza una herramienta como http-proxy-middleware para tener más control.

Siguiente.js

En Next.js, puedes configurar CORS en las rutas API.

  1. Cree un middleware personalizado para rutas 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. En next.config.js, también puedes modificar los encabezados de respuesta:
   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',
                       },
                   ],
               },
           ];
       },
   };

Resumen de dónde agregar encabezados:

  • Servidores web (Apache, Nginx): configurar en archivos de configuración del servidor (por ejemplo, .htaccess, nginx.conf).
  • Marcos de backend:
    • Django: Utilice encabezados-cors-django.
    • Ir: agrega encabezados manualmente o usa un middleware como rs/cors.
    • Node.js (Express): utiliza el middleware cors.
  • Frontend: en desarrollo, use configuraciones de proxy (como el proxy de React o los encabezados personalizados de Next.js) para evitar problemas de CORS, pero siempre maneje CORS en el backend en producción.
Declaración de liberación Este artículo se reproduce en: https://dev.to/tikam02/ways-to-resolve-cors-issues-15on?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3