GET
Μέθοδος HTTP
Προδιαγραφή της μεθόδου HTTP GET
Η μέθοδος GET ζητά τη μεταφορά μιας τρέχουσας επιλεγμένης αναπαράστασης για τον πόρο-στόχο. Η GET είναι ο πρωταρχικός μηχανισμός ανάκτησης πληροφοριών και το επίκεντρο σχεδόν όλων των βελτιστοποιήσεων απόδοσης. Ως εκ τούτου, όταν οι άνθρωποι μιλούν για ανάκτηση κάποιων αναγνωρίσιμων πληροφοριών μέσω του HTTP, εν γένει αναφέρονται στην πραγματοποίηση ενός αιτήματος GET.
Είναι δελεαστικό να σκεφτούμε τα αναγνωριστικά πόρων ως ονόματα διαδρομής απομακρυσμένων αρχείων του συστήματος αρχείων και τις αναπαραστάσεις ως αντίγραφα των περιεχομένων αυτών των αρχείων. Πράγματι, έτσι υλοποιούνται πολλοί πόροι (βλ. ενότητα 9.1 για σχετικές εκτιμήσεις ασφαλείας). Ωστόσο, δεν υπάρχουν τέτοιοι περιορισμοί στην πράξη. Η διεπαφή HTTP για έναν πόρο είναι εξίσου πιθανό να υλοποιηθεί ως ένα δέντρο αντικειμένων περιεχομένου, μια προγραμματιστική προβολή σε διάφορες εγγραφές βάσεων δεδομένων ή μια πύλη σε άλλα πληροφοριακά συστήματα. Ακόμη και όταν ο μηχανισμός αντιστοίχισης URI συνδέεται με ένα σύστημα αρχείων, ένας διακομιστής προέλευσης μπορεί να ρυθμιστεί ώστε να εκτελεί τα αρχεία με την αίτηση ως είσοδο και να στέλνει την έξοδο ως αναπαράσταση αντί να μεταφέρει τα αρχεία απευθείας. Ανεξάρτητα από αυτό, μόνο ο διακομιστής προέλευσης χρειάζεται να γνωρίζει πώς κάθε αναγνωριστικό πόρου του αντιστοιχεί σε μια υλοποίηση και πώς κάθε υλοποίηση καταφέρνει να επιλέγει και να στέλνει μια τρέχουσα αναπαράσταση του πόρου-στόχου σε μια απάντηση στο GET.
Ένας πελάτης μπορεί να αλλάξει τη σημασιολογία του GET ώστε να είναι ένα "αίτημα εύρους", ζητώντας τη μεταφορά μόνο κάποιου μέρους ή κάποιων τμημάτων της επιλεγμένης αναπαράστασης, στέλνοντας ένα πεδίο επικεφαλίδας Range στο αίτημα (RFC7233).
Ένα ωφέλιμο φορτίο μέσα σε ένα μήνυμα αίτησης GET δεν έχει καθορισμένη σημασιολογία- η αποστολή ενός σώματος ωφέλιμου φορτίου σε μια αίτηση GET μπορεί να προκαλέσει την απόρριψη της αίτησης από ορισμένες υπάρχουσες υλοποιήσεις.
Η απάντηση σε μια αίτηση GET είναι αποθηκεύσιμη στην κρυφή μνήμη- μια κρυφή μνήμη ΜΠΟΡΕΙ να τη χρησιμοποιήσει για την ικανοποίηση επόμενων αιτήσεων GET και HEAD, εκτός αν υποδεικνύεται διαφορετικά από το πεδίο κεφαλίδας Cache-Control (ενότητα 5.2 του RFC7234).
Περιγραφή της μεθόδου GET
Η μέθοδος GET του πρωτοκόλλου HTTP μπορεί να συγκριθεί με έναν ψηφιακό βιβλιοθηκάριο. Ζητάει ευγενικά από τον διακομιστή να παρουσιάσει δεδομένα χωρίς να κάνει καμία αλλαγή στα ίδια τα δεδομένα – είναι ένα αγνώριστο αίτημα.
Τι κάνει τη μέθοδο GET ξεχωριστή;
- Συνέπεια: Φανταστείτε να ζητάτε από τον βιβλιοθηκάριο το ίδιο βιβλίο πολλές φορές – θα πάρετε το ίδιο βιβλίο κάθε φορά. Το ίδιο ισχύει και για το αίτημα GET: παρέχει συνεπώς το ίδιο αποτέλεσμα.
- Διάβασε, μην γράψεις: Το αίτημα GET έχει το χαρακτήρα ενός παρατηρητή. Κοιτά τα δεδομένα αλλά δεν τα αλλάζει.
- Πληροφορίες στο URL: Θεωρήστε το URL ως μια διεύθυνση ή μια καρτέλα ευρετηρίου. Υποδεικνύει ποιο βιβλίο ή πληροφορία ψάχνετε. Ωστόσο, προσοχή: αυτές οι κάρτες δεν πρέπει να περιέχουν ιδιωτικές σημειώσεις, καθώς μπορούν να προβληθούν από άλλους.
- Γρήγορες και αποτελεσματικές απαντήσεις: Χάρη στη δυνατότητα caching των αποκρίσεων, η μέθοδος GET μπορεί να απαντά γρήγορα σε επανειλημμένα αιτήματα, πολύ σαν έναν καλά οργανωμένο βιβλιοθηκάριο που ξέρει ακριβώς πού βρίσκεται κάθε βιβλίο.
Αλλά υπάρχουν επίσης περιορισμοί:
- Περιορισμένος χώρος για σημειώσεις: Το URL έχει μόνο τόσο πολύ χώρο για πληροφορίες. Είναι σαν να γράφετε σε μια μικρή καρτέλα ευρετηρίου.
- Κανένα μυστικό: Εφόσον τα URL είναι ορατά και μπορούν να αποθηκευτούν, δεν πρέπει να σημειώνετε καμία ευαίσθητη πληροφορία σε αυτά.
- Καμία παρέμβαση: Ένας παρατηρητής δεν επηρεάζει αυτό που παρατηρεί. Επομένως, η μέθοδος GET δεν πρέπει να χρησιμοποιείται για την τροποποίηση δεδομένων. Υπάρχουν άλλα εργαλεία στο ψηφιακό μας εργαλειοθήκη για αυτό.
Συνολικά, η μέθοδος GET είναι ένα αξιόπιστο και ουσιαστικό εργαλείο στον ψηφιακό χώρο, βοηθώντας μας να ανακτούμε πληροφορίες αποτελεσματικά και με ασφάλεια.
Παράδειγμα για τη μέθοδο HTTP GET
GET /data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/58.0.3029.110 Safari/537
Accept: application/json
Accept-Language: de-DE,de;q=0.5
Connection: keep-alive
Cache-Control: max-age=0
Content-Type: application/json
Date: Mon, 31 July 2023 14:58:12 GMT
Server: Apache/2.4.7 (Ubuntu)
Cache-Control: no-cache