Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 12584|Απάντηση: 0

[Jquery] JSONP - Επίλυση του προβλήματος της πρόσβασης μεταξύ τομέων στον Άγιαξ

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 28/12/2015 2:22:00 μ.μ. | | |

Δεν έχω γράψει δοκίμιο εδώ και πολύ καιρό και πάντα νιώθω ότι δεν έχω χρόνο, αλλά στην πραγματικότητα, ο χρόνος είναι... Αρκετές ανοησίες, πριν από λίγες μέρες, υπήρχε μια νέα απαίτηση στη δουλειά, η οποία απαιτούσε από την ιστοσελίδα του front-end να καλεί ασύγχρονα τη μέθοδο backend Webservice για να επιστρέψει πληροφορίες. Υπάρχουν πολλοί τρόποι για να το εφαρμόσετε, αυτό το παράδειγμα χρησιμοποιεί jQuery+Ajax, μετά την ολοκλήρωση, όλα είναι εντάξει για εντοπισμό σφαλμάτων τοπικά, αλλά υπάρχει πρόβλημα μετά την ανάπτυξη στον διακομιστή και η κλήση υπηρεσίας παρασκηνίου δεν ανταποκρίνεται, τι συμβαίνει; Ο κώδικας δεν έχει αλλάξει πολύ, το μόνο που έχει αλλάξει είναι η διεύθυνση URL στη μέθοδο ajax του jQuery. Μήπως το πρόβλημα εδώ είναι ότι μετά τον έλεγχο και τον εντοπισμό σφαλμάτων, αποδεικνύεται ότι φταίει η ομόλογη πολιτική, γνωρίζουμε ότι το Javascrip{filtering}t ή το jQuery είναι μια δυναμική τεχνική δέσμης ενεργειών που χρησιμοποιείται συχνά στην ανάπτυξη διεπαφής ιστού. Στο Javascrip{filtering}t, υπάρχει ένας σημαντικός περιορισμός ασφαλείας γνωστός ως "Πολιτική ίδιας προέλευσης". Αυτή η πολιτική επιβάλλει έναν σημαντικό περιορισμό στο περιεχόμενο της σελίδας στην οποία μπορεί να έχει πρόσβαση ο κώδικας Javascrip{filter}t, δηλαδή, το Javascrip{filtering}t μπορεί να έχει πρόσβαση μόνο σε περιεχόμενο με το ίδιο όνομα τομέα με το έγγραφο ή τη δέσμη ενεργειών που το περιέχει. Τα σενάρια σε διαφορετικούς τομείς δεν μπορούν να έχουν πρόσβαση μεταξύ τους, ούτε καν σε υποτομείς. Όσον αφορά την ομόλογη στρατηγική, οι αναγνώστες μπορούν να την εξηγήσουν με περισσότερες λεπτομέρειες στο Baidu, κάτι που δεν θα επαναληφθεί εδώ.



Αλλά μερικές φορές είναι αναπόφευκτο να πραγματοποιούνται διατομεακές επιχειρήσεις και η «ομόλογη πολιτική» είναι ένας περιορισμός, τι πρέπει να κάνουμε; Ας ρίξουμε μια ματιά στον τρόπο υλοποίησης του JSONP cross-domain και ας συζητήσουμε την αρχή του JSONP cross-domain.



Το JSONP αναφέρεται εδώ, μετά κάποιος ρώτησε, ποια είναι η διαφορά και η διαφορά μεταξύ αυτού και του JSON, ας ρίξουμε μια ματιά, η Εγκυκλοπαίδεια Baidu έχει την εξής εξήγηση:

Το JSON (Javascrip{filtering}t Object Notation) είναι μια ελαφριά μορφή ανταλλαγής δεδομένων. Βασίζεται σε ένα υποσύνολο του Javascrip{filter}t (Standard ECMA-262 3rd Edition - December 1999). Το JSON χρησιμοποιεί μια εντελώς ανεξάρτητη από τη γλώσσα μορφή κειμένου, αλλά χρησιμοποιεί επίσης συνήθειες παρόμοιες με την οικογένεια C (συμπεριλαμβανομένων των C, C++, C#, Java, Javascrip, Perl, Python κ.λπ.). Αυτά τα χαρακτηριστικά καθιστούν την JSON ιδανική γλώσσα για ανταλλαγή δεδομένων. Εύκολο στην ανάγνωση και γραφή από τον άνθρωπο, αλλά και εύκολο στην ανάλυση και τη δημιουργία από μηχανή (γρήγορη μετάδοση δικτύου).

Το JSONP (JSON with padding) είναι ένα «μοτίβο χρήσης» του JSON, το οποίο μπορεί να χρησιμοποιηθεί για την επίλυση του προβλήματος της πρόσβασης σε δεδομένα μεταξύ τομέων σε κύρια προγράμματα περιήγησης. Λόγω της πολιτικής ίδιας προέλευσης, οι σελίδες που βρίσκονται γενικά σε server1.example.com δεν μπορούν να επικοινωνήσουν με διακομιστές που δεν είναι server1.example.com, με εξαίρεση το στοιχείο <scrip{filter}t> της HTML. Χρησιμοποιώντας αυτήν την ανοιχτή στρατηγική του στοιχείου <scrip{filter}t>, οι ιστοσελίδες μπορούν να λάβουν δεδομένα JSON που δημιουργούνται δυναμικά από άλλες πηγές και αυτό το μοτίβο χρήσης είναι γνωστό ως JSONP. Τα δεδομένα που καταγράφονται με το JSONP δεν είναι JSON, αλλά αυθαίρετα Javascrip{filter}t, τα οποία εκτελούνται με τον μεταφραστή Javascrip{filter}t αντί να αναλύονται από τον αναλυτή JSON.



Σε αυτό το σημείο, θα πρέπει να γίνει κατανοητό ότι το JSON είναι μια ελαφριά μορφή ανταλλαγής δεδομένων, όπως η xml, η οποία χρησιμοποιείται για την περιγραφή δεδομένων μεταξύ δεδομένων. Το JSONP είναι ένας τρόπος χρήσης δεδομένων JSON και αντί να επιστρέφει ένα αντικείμενο JSON, είναι ένα σενάριο javascrip{filtering}t που περιέχει ένα αντικείμενο JSON.



Πώς λειτουργεί λοιπόν το JSONP, γνωρίζουμε ότι λόγω των περιορισμών της πολιτικής ίδιας προέλευσης, το XmlHttpRequest επιτρέπει μόνο αιτήματα για πόρους από την τρέχουσα πηγή (όνομα τομέα, πρωτόκολλο, θύρα). Τα αιτήματα μεταξύ τομέων δεν είναι δυνατά για λόγους ασφαλείας, αλλά διαπιστώσαμε ότι όταν καλούνται αρχεία js σε ιστοσελίδες, δεν επηρεάζονται από cross-domain ή όχι και οι ετικέτες με το χαρακτηριστικό "src" έχουν δυνατότητες μεταξύ τομέων, όπως <scrip{filter}t>, <img>, ,<iframe>Εάν θέλετε να κάνετε μια αίτηση μεταξύ τομέων, κάντε μια αίτηση μεταξύ τομέων χρησιμοποιώντας την ετικέτα scrip{filter}t της html και επιστρέψτε τον κώδικα scrip{filtering}t που θα εκτελεστεί στην απόκριση, στην οποία μπορείτε να χρησιμοποιήσετε απευθείας το JSON για να περάσετε το αντικείμενο javascrip{filter}t. Δηλαδή, δημιουργώντας δεδομένα JSON στον διακομιστή μεταξύ τομέων και στη συνέχεια τυλίγοντάς τα σε ένα σενάριο scrip{filtering}t πίσω, το οποίο ξεπερνά τους περιορισμούς της πολιτικής ίδιας προέλευσης και λύνει το πρόβλημα της πρόσβασης μεταξύ τομέων.

Ας ρίξουμε μια ματιά στο πώς να το πετύχετε:

Κωδικός διεπαφής:






Προηγούμενος:Ανάθεση τιμών μεταξύ φορμών Winform
Επόμενος:Ξεκινήστε πολλές υπηρεσίες Memcached στον ίδιο υπολογιστή Windows
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com