我正在尝试通过javascript向服务器(这是一个REST服务)发出POST请求,并且在我的请求中我想发送一个cookie。我的下面代码无效,因为我无法接收cookie在服务器端。下面是我的客户端和服务器端代码。
客户端:
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);
服务器端:
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
}
答案 0 :(得分:5)
如果header与以下标头之一不区分大小写匹配,请终止这些步骤...
Cookie
您无法使用XHR显式设置Cookie标头。
看起来你正在发出一个交叉来源请求(你使用的是绝对URI)。
您可以将withCredentials
设置为包含Cookie。
如果要将用户凭据包含在跨源请求中,则为
。如果要在跨源请求中排除它们以及在响应中忽略cookie,则为false。最初是假的。
这样:
client.withCredentials = true;
这仅在http://localhost:8080
使用其中一种受支持的方法(例如在HTTP Set-Cookie
响应标头中)设置Cookie时才有效。
如果不这样做,你将不得不在其他地方对你想要放入cookie的数据进行编码。
答案 1 :(得分:0)
这也可以通过更现代的fetch
fetch(url, {
method: 'POST',
credentials: 'include'
//other options
}).then(response => console.log("Response status: ", response.status));