在javascript中发送HTTP POST请求中的cookie

时间:2016-03-01 20:46:56

标签: javascript cookies http-headers http-post httprequest

我正在尝试通过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
}

2 个答案:

答案 0 :(得分:5)

请参阅the documentation

  

如果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));