Γιατί αποστέλλεται η μέθοδος OPTIONS σε ένα αίτημα HTTP πριν από την εκτέλεση αιτημάτων GET/POST;
sobes.tech AI
Απάντηση από AI
Η μέθοδος OPTIONS χρησιμοποιείται για τον προσδιορισμό των διαθέσιμων μεθόδων και άλλων παραμετροποιημένων επιλογών για έναν ιστότοπο ή διακομιστή, χωρίς να απαιτείται κάποια ειδική ενέργεια ή πρόσβαση στον πόρο από το αίτημα. Είναι μέρος του μηχανισμού CORS (Cross-Origin Resource Sharing).
Όταν μια ιστοσελίδα προσπαθεί να κάνει ένα αίτημα σε πόρο σε διαφορετικό domain (cross-origin αίτημα), ο περιηγητής μπορεί να στείλει ένα προ-αίτημα (preflight) με τη μέθοδο OPTIONS. Αυτό το αίτημα περιέχει επικεφαλίδες όπως Access-Control-Request-Method και Access-Control-Request-Headers, που δείχνουν ποια HTTP μέθοδο και ποια επικεφαλίδες θα χρησιμοποιηθούν στο πραγματικό αίτημα.
Ο διακομιστής που λαμβάνει το αίτημα OPTIONS μπορεί να απαντήσει με επικεφαλίδες όπως Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers και Access-Control-Max-Age, για να ενημερώσει το πρόγραμμα περιήγησης αν το πραγματικό αίτημα επιτρέπεται και ποιες μέθοδοι/επικεφαλίδες είναι αποδεκτές.
Αν ο διακομιστής επιτρέπει το αίτημα, το πρόγραμμα περιήγησης συνεχίζει με την εκτέλεση του πραγματικού αιτήματος (GET, POST κ.λπ.). Αν όχι, το αίτημα μπλοκάρεται από το πρόγραμμα περιήγησης, προστατεύοντας έτσι τον διακομιστή από μη εξουσιοδοτημένα cross-origin αιτήματα.
Το αίτημα OPTIONS δεν αποστέλλεται πριν από κάθε αίτημα GET/POST, αλλά μόνο πριν από ορισμένους τύπους cross-origin αιτημάτων που θεωρούνται "μη-απλά" (non-simple). Τα απλά αιτήματα (π.χ., GET ή POST με συγκεκριμένους τύπους περιεχομένου και χωρίς προσαρμοσμένες επικεφαλίδες) αποστέλλονται χωρίς προ-αίτημα OPTIONS.
# Παράδειγμα επικεφαλίδων αιτήματος OPTIONS
# Access-Control-Request-Method: POST
# Access-Control-Request-Headers: Content-Type, Authorization
# Origin: http://client-domain.com
# Παράδειγμα απάντησης διακομιστή σε OPTIONS
# Access-Control-Allow-Origin: http://client-domain.com
# Access-Control-Allow-Methods: POST, GET, OPTIONS
# Access-Control-Allow-Headers: Content-Type, Authorization
# Access-Control-Max-Age: 86400 # Cache το αποτέλεσμα preflight για 24 ώρες
Γενικά, πρόκειται για έναν μηχανισμό ασφαλείας για τον έλεγχο πρόσβασης σε πόρους κατά τις cross-origin αιτήσεις, που επιτρέπει στον διακομιστή να καθορίσει πριν από την αποστολή της κύριας αίτησης αν ο περιηγητής θα εκτελέσει επιτρεπτές ενέργειες.