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
}
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.
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));