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:
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"
Header set Access-Control-Allow-Origin "https://example.com"
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
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; } }
add_header Access-Control-Allow-Credentials "true";
Dann starten Sie Nginx neu:
sudo systemctl restart nginx
In Django können Sie CORS-Header mit dem Paket django-cors-headers hinzufügen.
pip install django-cors-headers
INSTALLED_APPS = [ ... 'corsheaders', ]
MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... ]
CORS_ALLOWED_ORIGINS = [ "https://example.com", ]
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = ['Authorization', 'Content-Type'] CORS_ALLOW_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
In Go können Sie CORS manuell im HTTP-Handler verarbeiten oder eine Middleware wie rs/cors verwenden.
Verwendung der rs/cors-Middleware:
go get github.com/rs/cors
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) }
In Express (Node.js) können Sie die CORS-Middleware verwenden.
npm install cors
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'); });
In React wird CORS vom Backend verwaltet, aber während der Entwicklung können Sie API-Anfragen weiterleiten, um CORS-Probleme zu vermeiden.
{ "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.
In Next.js können Sie CORS in den API-Routen konfigurieren.
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' }); }
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', }, ], }, ]; }, };
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