web-dev-qa-db-fra.com

Cookies HTTP et requêtes Ajax via HTTPS

Je sais que cela a déjà été demandé sous diverses formes, mais je n'arrive pas à contourner le problème. J'ai essayé d'utiliser à la fois jQuery et l'API JS native pour effectuer les requêtes Ajax.

Ma situation est la suivante (voir schéma ci-joint):

  1. Le navigateur fait une requête HTTP
  2. Le serveur répond et définit un cookie persistant
  3. Le navigateur fait une requête HTTP Ajax, le cookie est bien
  4. Le serveur répond comme prévu, met à jour le cookie
  5. Le navigateur fait une requête Ajax HTTPS, le cookie n'est plus là (?!)
  6. Le serveur donne une réponse "par défaut", car il n'y a pas de cookie (comportement involontaire)

Avant de commencer une conférence sur les demandes interdomaines, permettez-moi de dire deux choses:

  • Je sais qu'il s'agit d'une demande interdomaine (protocole différent), et c'est pourquoi le serveur définit le Access-Control-Allow-Origin en-tête dans la réponse (et j'utilise Chrome et Firefox, tous deux prenant en charge CORS )
  • Ce que je sais aussi, cependant, c'est que le cookie HTTP devrait être gérable sur HTTPS (voir ici ) car l'hôte est le même
  • (EDIT) Le cookie est correctement défini pour le domaine général (par exemple .domain.ext) et ni les indicateurs HttpOnly ni Secure ne sont définis

Alors, pourquoi, pourquoi, pourquoi le navigateur ne transmet-il pas le cookie lors de l'appel HTTPS Ajax? Des idées? Je suis sur le point de perdre la tête ...

     +-----------+ HTTP Request     +-----------+
     |Browser    |+---------------->|Server     |
     +-----------+                  +-----------+

                   HTTP Response
                  <----------------+
                   Set-cookie

                   Ajax HTTP Req.
                  +---------------->
                   Cookie (OK)

                   HTTP Response
                  <----------------+
                   Set-cookie (OK)

                   Ajax HTTPS Req.
                  +---------------->
                   No Cookie (!!!)
43
NeXuS

Ok, j'ai trouvé la solution au problème des cookies.

Voir spécifications XHR , documents jQuery et StackOverflow .

La solution pour envoyer les cookies lors du changement de protocole et/ou de sous-domaine est de définir la propriété withCredentials sur true.

Par exemple. (en utilisant jQuery)

 $.ajax( {
   /* Setup the call */
   xhrFields: {
     withCredentials: true
   }
 });
72
NeXuS