web-dev-qa-db-fra.com

Comment faire un AJAX Demande HTTPS GET à l'aide de jQuery

Comment faire explicitement une demande HTTPS GET AJAX à l'aide de jQuery? J'essaie de faire ce qui suit . Sur une page https, j'ai une ligne avec le code $.get("/resource"), mais j'obtiens l'erreur suivante

XMLHttpRequest cannot load http://www.site.com/resource. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.site.com' is therefore not allowed access.

Pourquoi l'appel AJAX tente-t-il d'accéder à la page à l'aide du protocole HTTP si la ressource relative provient d'une page https? Si la méthode $ .get (url) le fait par défaut, comment utiliser jQuery pour effectuer une demande HTTPS GET explicite? Une autre personne présentant un problème similaire, à http://forum.jquery.com/topic/jquery-get-ajax-call-on-http-page-to-https-on-same-domain pourrait pas le résoudre.

la version jQuery est 1.7.2

19
FearlessFuture

J'ai résolu le problème. Il s'est avéré qu'en raison de la configuration de notre site Django, j'avais besoin d'ajouter une barre oblique finale aux ressources dans la demande AJAX. Sans la barre oblique finale, Django devrait alors redirecter vers l'URL avec la barre oblique finale à l'aide d'une requête HTTP au lieu d'une requête HTTPS.

En bref, j'ai remplacé $.get("/resource") par $.get("/resource/").

Je vous remercie. J'apprécie vraiment toute votre aide.

43
FearlessFuture

Si la page sur laquelle vous vous trouvez est une page https et que la page que vous essayez d'accéder est un fichier http, cela ne fonctionnera pas en raison de la même origine. Cependant, vous pouvez simplement écrire l'ajax au lieu de le donner avec .get :) 

$.ajax({
    type: "GET", 
    url: "https://someurl"
});

Bien que je suppose être juste, c’est encore un peu de vrai javascript

9
mituw16

Essayez de définir le type de données sur "jsonp", cela m’a aidé dans le passé avec les requêtes cross-Origin. 

    $.ajax({
            url: "//www.site.com/resource"
            dataType: "jsonp",
            success: function(data) {
                $(".demo-card").html(data);
            }
    });
2
alphapilgrim

Utilisez simplement RewriteRule dans votre fichier .htaccess avec le protocole spécifié, par exemple:

RewriteCond %{REQUEST_URI} .+[^/]$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L,QSA]
0
Alex S