لحل مشكلات CORS، تحتاج إلى إضافة الرؤوس المناسبة إما في خادم الويب (مثل Apache أو Nginx)، أو في الواجهة الخلفية (مثل Django، Go، أو Node.js) أو في أطر عمل الواجهة الأمامية (مثل React أو Next.js). فيما يلي الخطوات لكل منصة:
يمكنك تكوين رؤوس CORS في ملفات تكوين Apache (مثل .htaccess، أو httpd.conf، أو apache2.conf)، أو ضمن تكوين مضيف افتراضي محدد.
أضف الأسطر التالية لتمكين 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"
Header set Access-Control-Allow-Origin "https://example.com"
Header set Access-Control-Allow-Credentials "true"
تأكد من تمكين وحدة mod_headers. إذا لم يكن الأمر كذلك، قم بتمكينه باستخدام:
sudo a2enmod headers sudo systemctl restart apache2
في Nginx، يمكنك تكوين رؤوس CORS في nginx.conf أو ضمن كتلة خادم معينة.
أضف الأسطر التالية:
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";
ثم أعد تشغيل Nginx:
sudo systemctl restart nginx
في Django، يمكنك إضافة رؤوس CORS باستخدام حزمة 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']
في Go، يمكنك التعامل مع CORS يدويًا في معالج HTTP أو استخدام برنامج وسيط مثل rs/cors.
استخدام البرنامج الوسيط 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) }
في Express (Node.js)، يمكنك استخدام البرنامج الوسيط 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'); });
في React، يتم التعامل مع CORS من خلال الواجهة الخلفية، ولكن أثناء التطوير، يمكنك وكيل طلبات واجهة برمجة التطبيقات (API) لتجنب مشكلات CORS.
{ "proxy": "http://localhost:5000" }
سيعمل هذا على توكيل الطلبات أثناء التطوير إلى خادم الواجهة الخلفية الخاص بك الذي يعمل على المنفذ 5000.
بالنسبة للإنتاج، يجب أن تتعامل الواجهة الخلفية مع CORS. إذا لزم الأمر، استخدم أداة مثل http-proxy-middleware لمزيد من التحكم.
في Next.js، يمكنك تكوين CORS في مسارات 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', }, ], }, ]; }, };
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3