„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Möglichkeiten zur Lösung von CORS-Problemen

Möglichkeiten zur Lösung von CORS-Problemen

Veröffentlicht am 07.11.2024
Durchsuche:246

Ways to resolve CORS issues

Um CORS-Probleme zu beheben, müssen Sie die entsprechenden Header entweder im Webserver (wie Apache oder Nginx) oder im Backend (wie Django, Go oder Node.js) hinzufügen. , oder in den Frontend-Frameworks (wie React oder Next.js). Nachfolgend sind die Schritte für jede Plattform aufgeführt:

1. Webserver

Apache

Sie können CORS-Header in den Konfigurationsdateien von Apache (z. B. .htaccess, httpd.conf oder apache2.conf) oder innerhalb einer bestimmten virtuellen Hostkonfiguration konfigurieren.

Fügen Sie die folgenden Zeilen hinzu, um CORS zu aktivieren:


    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"
  • So wenden Sie CORS für bestimmte Domänen an:
  Header set Access-Control-Allow-Origin "https://example.com"
  • Wenn Anmeldeinformationen erforderlich sind:
  Header set Access-Control-Allow-Credentials "true"

Stellen Sie sicher, dass das mod_headers-Modul aktiviert ist. Wenn nicht, aktivieren Sie es mit:

sudo a2enmod headers
sudo systemctl restart apache2

Nginx

In Nginx können Sie CORS-Header in der nginx.conf oder innerhalb eines bestimmten Serverblocks konfigurieren.

Fügen Sie die folgenden Zeilen hinzu:

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;
    }
}
  • Wenn Anmeldeinformationen erforderlich sind:
  add_header Access-Control-Allow-Credentials "true";

Dann starten Sie Nginx neu:

sudo systemctl restart nginx

2. Backend-Frameworks

Django

In Django können Sie CORS-Header mit dem Paket django-cors-headers hinzufügen.

  1. Installieren Sie das Paket:
   pip install django-cors-headers
  1. Fügen Sie „corsheaders“ zu INSTALLED_APPS in Ihrer Settings.py hinzu:
   INSTALLED_APPS = [
       ...
       'corsheaders',
   ]
  1. Fügen Sie die CORS-Middleware zu Ihrer MIDDLEWARE hinzu:
   MIDDLEWARE = [
       'corsheaders.middleware.CorsMiddleware',
       'django.middleware.common.CommonMiddleware',
       ...
   ]
  1. Legen Sie die zulässigen Ursprünge in Settings.py fest:
   CORS_ALLOWED_ORIGINS = [
       "https://example.com",
   ]
  • Um alle Ursprünge zuzulassen:
  CORS_ALLOW_ALL_ORIGINS = True
  • Wenn Anmeldeinformationen erforderlich sind:
  CORS_ALLOW_CREDENTIALS = True
  • So erlauben Sie bestimmte Header oder Methoden:
  CORS_ALLOW_HEADERS = ['Authorization', 'Content-Type']
  CORS_ALLOW_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']

Go (Golang)

In Go können Sie CORS manuell im HTTP-Handler verarbeiten oder eine Middleware wie rs/cors verwenden.

Verwendung der rs/cors-Middleware:

  1. Installieren Sie das Paket:
   go get github.com/rs/cors
  1. Verwenden Sie es in Ihrer Anwendung:
   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 (Express)

In Express (Node.js) können Sie die CORS-Middleware verwenden.

  1. Installieren Sie das cors-Paket:
   npm install cors
  1. Fügen Sie die Middleware in Ihrer Express-App hinzu:
   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. Frontend-Frameworks

Reagieren

In React wird CORS vom Backend verwaltet, aber während der Entwicklung können Sie API-Anfragen weiterleiten, um CORS-Probleme zu vermeiden.

  1. Fügen Sie einen Proxy zur package.json hinzu:
   {
     "proxy": "http://localhost:5000"
   }

Dadurch werden Anfragen während der Entwicklung an Ihren Backend-Server weitergeleitet, der auf Port 5000 läuft.

Für die Produktion sollte das Backend CORS verarbeiten. Verwenden Sie bei Bedarf ein Tool wie http-proxy-middleware für mehr Kontrolle.

Next.js

In Next.js können Sie CORS in den API-Routen konfigurieren.

  1. Erstellen Sie eine benutzerdefinierte Middleware für API-Routen:
   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. In next.config.js können Sie auch Antwortheader ändern:
   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',
                       },
                   ],
               },
           ];
       },
   };

Zusammenfassung zum Hinzufügen von Headern:

  • Webserver (Apache, Nginx): Konfigurieren Sie in Serverkonfigurationsdateien (z. B. .htaccess, nginx.conf).
  • Backend-Frameworks:
    • Django: Verwenden Sie Django-Cors-Header.
    • Go: Header manuell hinzufügen oder eine Middleware wie rs/cors verwenden.
    • Node.js (Express): Verwenden Sie die Cors-Middleware.
  • Frontend: Verwenden Sie in der Entwicklung Proxy-Setups (wie den Proxy von React oder benutzerdefinierte Header von Next.js), um CORS-Probleme zu vermeiden, behandeln Sie CORS jedoch in der Produktion immer im Backend.
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/tikam02/ways-to-resolve-cors-issues-15on?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3