web-dev-qa-db-fra.com

Envoyer un cookie en HTTP POST Demande en javascript

J'essaie de faire une demande POST au serveur (qui est un service REST) via javascript, et dans ma demande, je veux envoyer un cookie. Mon code ci-dessous ne fonctionne pas, car je ne peux pas recevoir de cookie côté serveur. Ci-dessous sont mes codes côté client et côté serveur.

Côté client:

var client = new XMLHttpRequest();
          var request_data=JSON.stringify(data);
var endPoint="http://localhost:8080/pcap";
var cookie="session=abc";
          client.open("POST", endPoint, false);//This Post will become put 
          client.setRequestHeader("Accept", "application/json");
          client.setRequestHeader("Content-Type","application/json");

          client.setRequestHeader("Set-Cookie","session=abc");
          client.setRequestHeader("Cookie",cookie);
          client.send(request_data);

Côté serveur:

public @ResponseBody ResponseEntity getPcap(HttpServletRequest request,@RequestBody PcapParameters pcap_params ){

Cookie cookies[]=request.getCookies();//Its coming as NULL
        String cook=request.getHeader("Cookie");//Its coming as NULL
}
10
arpit joshi

Voir la documentation :

Arrêtez ces étapes si l'en-tête est une correspondance insensible à la casse pour l'un des en-têtes suivants… Cookie

Vous ne pouvez pas définir explicitement un en-tête de cookie à l'aide de XHR.


Il semble que vous fassiez une demande d'origine croisée (vous utilisez un URI absolu).

Vous pouvez définir withCredentials pour inclure les cookies.

Vrai lorsque les informations d'identification de l'utilisateur doivent être incluses dans une demande multi-origine. Faux lorsqu'ils doivent être exclus dans une demande d'origine croisée et lorsque les cookies doivent être ignorés dans sa réponse. Initialement faux.

Tel:

client.withCredentials = true;

Cela ne fonctionnera que si http://localhost:8080 a défini un cookie à l'aide de l'une des méthodes prises en charge (comme dans un HTTP Set-Cookie réponse en-tête).


A défaut, vous devrez encoder les données que vous souhaitez mettre dans le cookie ailleurs.

7
Quentin

Cela peut également être fait avec le fetch plus moderne

fetch(url, {
    method: 'POST',
    credentials: 'include'
    //other options
}).then(response => console.log("Response status: ", response.status));
1
PDStat