Τι είναι το CORS;
sobes.tech AI
Απάντηση από AI
Το CORS (Cross-Origin Resource Sharing) είναι ένας μηχανισμός που επιτρέπει στις ιστοσελίδες να ζητούν πόρους από διαφορετικό τομέα, θύρα ή πρωτόκολλο από αυτόν από τον οποίο φορτώθηκε η ίδια η σελίδα. Αυτό γίνεται μέσω επιπλέον κεφαλίδων HTTP.
Κατά κανόνα, οι περιηγητές εφαρμόζουν την πολιτική Same-Origin Policy (SOP), η οποία απαγορεύει σε scripts που εκτελούνται σε μια σελίδα να έχουν πρόσβαση σε δεδομένα από άλλη πηγή (τομέα, θύρα, πρωτόκολλο). Το CORS χαλαρώνει αυτή την πολιτική με ελεγχόμενο τρόπο, επιτρέποντας στον διακομιστή να δηλώνει ρητά ποιες αιτήσεις μεταξύ διαφορετικών τομέων επιτρέπονται.
Πώς λειτουργεί το CORS:
- Απλό αίτημα: Αν το αίτημα πληροί ορισμένα κριτήρια (π.χ., χρησιμοποιεί τη μέθοδο GET ή POST, επιτρέπονται μόνο ορισμένα κεφαλοειδή), ο περιηγητής στέλνει το αίτημα απευθείας με μια επιπλέον κεφαλίδα
Originπου δείχνει την πηγή του αιτήματος. Ο διακομιστής, λαμβάνοντας αυτή την κεφαλίδα, μπορεί να απαντήσει με την κεφαλίδαAccess-Control-Allow-Originπου δηλώνει την επιτρεπτή πηγή. - Preflight: Για "μη απλά" αιτήματα (π.χ., με μεθόδους
PUT,DELETE, ή με προσαρμοσμένες κεφαλίδες), ο περιηγητής στέλνει πρώτα ένα προ-έλεγχο (OPTIONS). Αυτό ρωτά τον διακομιστή αν το κύριο αίτημα επιτρέπεται. Ο διακομιστής απαντά με κεφαλίδες που δηλώνουν τις επιτρεπτές μεθόδους, κεφαλίδες και πηγές. Αν η προ-έλεγχος είναι επιτυχής, ο περιηγητής στέλνει το πραγματικό αίτημα.
Βασικές κεφαλίδες CORS:
Origin: Αποστέλλεται από τον περιηγητή στο αίτημα, δείχνει την πηγή (τομέα, θύρα, πρωτόκολλο) της σελίδας που κάνει το αίτημα.Access-Control-Allow-Origin: Αποστέλλεται από τον διακομιστή στην απάντηση, δείχνει την πηγή που μπορεί να λάβει την απάντηση. Μπορεί να είναι συγκεκριμένος τομέας,*(οποιαδήποτε πηγή), ή να παράγεται δυναμικά με βάση την κεφαλίδαOrigin.Access-Control-Allow-Methods: Αποστέλλεται από τον διακομιστή στην απάντηση στο preflight, δείχνει τις επιτρεπτές μεθόδους HTTP (GET, POST, PUT, DELETE κ.λπ.).Access-Control-Allow-Headers: Αποστέλλεται από τον διακομιστή στην απάντηση στο preflight, δείχνει τις επιτρεπτές κεφαλίδες αιτήματος.Access-Control-Allow-Credentials: Αποστέλλεται από τον διακομιστή στην απάντηση, δείχνει αν επιτρέπεται η αποδοχή cookies και άλλων διαπιστευτηρίων στην αίτηση.
Παράδειγμα κεφαλίδων απάντησης διακομιστή που επιτρέπουν αιτήματα από https://example.com:
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Το CORS είναι απαραίτητο για τη σωστή λειτουργία πολλών web εφαρμογών που χρησιμοποιούν διασταυρούμενα AJAX αιτήματα, όπως η αλληλεπίδραση με API, η φόρτωση γραμματοσειρών, η χρήση Web Fonts με CDN κ.λπ. Η σωστή διαμόρφωση του CORS στον διακομιστή είναι κρίσιμη για την ασφάλεια και τη λειτουργικότητα της εφαρμογής.