Rumah >hujung hadapan web >tutorial js >Cara untuk menyelesaikan isu CORS
Untuk menyelesaikan isu CORS, anda perlu menambah pengepala yang sesuai sama ada dalam pelayan web (seperti Apache atau Nginx), di bahagian belakang (seperti Django, Go atau Node.js) , atau dalam rangka kerja bahagian hadapan (seperti React atau Next.js). Berikut adalah langkah-langkah untuk setiap platform:
Anda boleh mengkonfigurasi pengepala CORS dalam fail konfigurasi Apache (seperti .htaccess, httpd.conf atau apache2.conf), atau dalam konfigurasi hos maya tertentu.
Tambah baris berikut untuk mendayakan CORS:
<IfModule mod_headers.c> 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" </IfModule>
Header set Access-Control-Allow-Origin "https://example.com"
Header set Access-Control-Allow-Credentials "true"
Pastikan modul mod_headers didayakan. Jika tidak, dayakannya menggunakan:
sudo a2enmod headers sudo systemctl restart apache2
Dalam Nginx, anda boleh mengkonfigurasi pengepala CORS dalam nginx.conf atau dalam blok pelayan tertentu.
Tambah baris berikut:
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";
Kemudian mulakan semula Nginx:
sudo systemctl restart nginx
Dalam Django, anda boleh menambah pengepala CORS menggunakan pakej django-cors-headers.
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']
Dalam Go, anda boleh mengendalikan CORS secara manual dalam pengendali HTTP atau menggunakan perisian tengah seperti rs/cors.
Menggunakan perisian tengah rs/cors:
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) }
Dalam Express (Node.js), anda boleh menggunakan perisian tengah cors.
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'); });
Dalam React, CORS dikendalikan oleh bahagian belakang, tetapi semasa pembangunan, anda boleh proksi permintaan API untuk mengelakkan isu CORS.
{ "proxy": "http://localhost:5000" }
Ini akan meminta proksi semasa pembangunan ke pelayan bahagian belakang anda berjalan pada port 5000.
Untuk pengeluaran, bahagian belakang harus mengendalikan CORS. Jika perlu, gunakan alat seperti http-proxy-middleware untuk lebih kawalan.
Dalam Next.js, anda boleh mengkonfigurasi CORS dalam laluan 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' }); }
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', }, ], }, ]; }, };
Atas ialah kandungan terperinci Cara untuk menyelesaikan isu CORS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!