Επαιζά με ajax αυτές τις μέρες και μόλις παρατήρησα για πρωτη φορά ότι δεν μπορείς να κάνεις http requests σε διαφορετικό domain απ' ότι το origin domain. Το έψαξα, έμαθα τους κανόνες που ακολουθεί το ajax (το request domain, protocol και port πρέπει να είναι ίδιο με το origin) και όλα καλά μέχρι εδώ.
Ερώτημα 1: Επίσης έμαθα για το cors και από ότι κατάλαβα στην ουσία είναι ένα σύστημα για file permissions σε έναν webserver; Δηλαδή για παράδειγμα στον apache μπορώ να πω, το τάδε αρχείο ή directory είναι public η private? Μέχρι τώρα νόμιζα ότι ότι υπάρχει μέσα στο directory /var/http είναι public για όλους εκεί έξω. Δεν ισχύει αυτό;
Ερώτημα 2: Αν κάνω ένα http request από ένα scriptaki στον webserver (χρησιμοποιώ apache) θα δουλέψει; Η πρέπει να μπω αναγκαστηκά από browser;
Γενικά θα έχω και μια android εφορμογή η οποία θα χρησιμοποιεί έναν ενδιάμεσο (php) στον server μου για να αποθηκεύει και να λαμβάνει δεδομένα από την βάση δεδομένων. Τα http requests θα δουλεύουν ή πρέπει να δώσω permission με κάποιο τρόπο σε όλους εκεί έξω για το συγκεκριμένο php αρχείο?
Εμφάνιση 1-13 από 13
-
16-08-19, 16:51 Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #1
-
16-08-19, 17:02 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #2
Αν το response από τον server περιέχει τον header Access-Control-Allow-Origin, ο οποίος έχει το domain από το οποίο κάνεις το request, είτε *(όλα τα domain επιτρέπονται), τότε παρέχεται ajax access. Τα αρχεία είναι public για όλους αλλά όχι για ajax access, αλλά για κανονικό access, δηλαδή αν κάνεις navigate direct στο αρχείο.
-
16-08-19, 18:01 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #3
Άρα με άλλα λόγια μόνο για το ajax ισχύει αυτό, αν κάνω ένα http request από python για παράδειγμα θα δουλέψει κανονικά και θα πάρω το response, σωστά;
Επίσης αν ξέρεις κανένα καλό λινκ που να εξηγεί γιατί το ajax έχει αυτόν τον περιορισμό, θα μου ήταν πολύ χρήσιμο!
Ευχαριστώ
-
16-08-19, 18:12 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #4
Ναι ισχύει μόνο για το ajax.
Όταν κάνεις ένα request είτε με ajax, είτε κανονικό request, αποστέλλονται τα cookies που έχεις για το domain που γίνεται αυτό το request. Φάντασου ότι αν δεν υπήρχε αυτός ο περιορισμός οποιoδήποτε site θα μπορούσε να τραβάει αρχεία από οποιδήποτε άλλο site με τα δικά σου cookies, δηλαδή αν πχ είσαι συνδεμένος στο fb και ανοίξεις ένα tab και πάς σε ένα κακόβουλο site, θα μπορούσε μέσω ajax να τραβήξει μηνύματα στο messenger. Ενώ με αυτόν τον περιορισμό μονο το fb μπορέι να κάνει ajax call.
-
16-08-19, 18:58 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #5
α κατάλαβα!!! Ευχαριστώ! Πραγματικά μου έλυσες μια τεράστια απορία!
- - - Updated - - -
Κάτι τελευταίο. Στον ιντερνετ είδα ότι όταν κάνεις ajax request σε άλλο domain από τι το origin σου εμφανίζει το μύνημα
Κώδικας:the access control allow origin header has a value that does not much the origin
τo ajax μου επιστρέφει error 404 not found. Είναι λογικό αυτό το error? Το url που χρησιμοποιώ στο request δουλεύει σίγουρα (δοκίμασα να το κάνω copy-paste κατευθεία στον browser για να δω αν γίνεται και όντως παίρνω το response κανονικά.)
- - - Updated - - -
Κάτι τελευταίο. Στον ιντερνετ είδα ότι όταν κάνεις ajax request σε άλλο domain από τι το origin σου εμφανίζει το μύνημα
Κώδικας:the access control allow origin header has a value that does not much the origin
τo ajax μου επιστρέφει error 404 not found. Είναι λογικό αυτό το error? Το url που χρεισιμοποιώ στο request δουλεύει σίγουρα (δοκίμασα να το κάνω copy-paste κατευθεία στον browser για να δω αν γίνεται και όντως πέρνω το response κανονικά.)
-
16-08-19, 19:01 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #6
Είναι αρχείο ή script; Σε δικό σου server είναι ή σε κάποιον άλλο;
-
16-08-19, 19:26 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #7
Τελικά το λάθος εδώ δεν ήταν το cross origin αλλά στο url. Έδινα στο ajax αυτό
Κώδικας:192.168.1.5:1996/test/php/test.php
Κώδικας:http://192.168.1.5:1996/test/php/test.php
Τέλος πάντων τώρα δοκίμασα κάτι άλλο και πάλι δεν δουλεύει και τώρα παίρνω το μύνημα.
Ο server είναι apache και τρέχει στο local machine μου. Μπήκα από την εξωτερική μου ip ενώ το ajax κάνει request στην εσωτερική local ip και παίρνω το error
Κώδικας:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://192.168.1.5:1996/test/php/test.php. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
Κώδικας:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Test</title> <script> function doStuff() { xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) alert(this.responseText); else if (this.readyState == 4 && this.status != 200) alert(this.status); } xhttp.open("GET", "http://192.168.1.5:1996/test/php/test.php", true); xhttp.send(); } </script> </head> <body> <input type="button" onclick="doStuff()"> </body> </html>
Επίσης έβαλα ένα .htaccess αρχείο στο directory που βρήσκετε το .php αρχείο.
Κανονικά δεν θα έπρεπε να δουλεύει;;Τελευταία επεξεργασία από το μέλος babaliaris : 16-08-19 στις 19:33.
-
16-08-19, 19:42 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #8
Μην χρησιμοποίεις το full path. Αντί για http://192.168.1.5:1996/test/php/test.php βάλε php/test.php ή /test/php/test.php
Το πρώτο είναι relative ως προς το αρχείο που τρέχει ο κώδικας ενώ το δεύτερο ως προς το server root.
-
16-08-19, 19:48 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #9
αυτό λειτουργεί, αλλά με αυτό το test προσπαθώ να δοκιμάσω το cross origin request. Για αυτό βάζω το full path http://192.168.1.5:1996/test/php/test.php στο ajax url ενώ εγώ μπαίνω στο index.html (μέσω browser) χρησιμοποιόντας την εξωτερική μου ip http://94.68.171.202:1996/test/ για να δοκιμάσω αν δουλεύει το CORS αλλά δεν δουλεύει.
-
16-08-19, 19:52 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #10
Δοκίμασε στο php script πριν κάνεις print κάτι, να στείλεις τον header manually.
Κώδικας:header("Access-Control-Allow-Origin: *");
-
16-08-19, 19:58 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #11
-
16-08-19, 20:07 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #12
Δοκίμασε να αντικαταστήσεις τα περιεχόμενα του .htaccess με αυτό:
Κώδικας:Header add Access-Control-Allow-Origin "*" Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
-
16-08-19, 20:19 Απάντηση: Web Dev: Δεν κατάλαβα ακριβώς τι είναι το CORS. Ισχύει μόνο για ajax? #13
μπα, δεν δουλεύει.
- - - Updated - - -
Βρήκα αυτό στο στο stackoverflow και μπαίνω από firefox. Μάλλον αυτό είναι.
- - - Updated - - -
Δεν πηράζει ποια η διαφορά; Θα βάζω τον header μέσα από το php αρχείο που με ενδιαφέρει να είναι cross origin όπως μου έδειξες.
Bookmarks