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

arp*_*shi 10 javascript cookies http-post httprequest http-headers

我试图通过javascript向服务器(这是一个REST服务)发出POST请求,并在我的请求中我想发送一个cookie.我的下面的代码无法正常工作,因为我无法在服务器上接收cookie side.Below是我的客户端和服务器端代码.

客户端 :

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);
Run Code Online (Sandbox Code Playgroud)

服务器端:

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
}
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 7

请参阅文档

如果标头与以下标头之一不区分大小写,请终止这些步骤…… Cookie

您不能使用XHR显式设置Cookie标头。


看起来您正在发出跨源请求(您正在使用绝对URI)。

您可以设置withCredentials为包含cookie。

当用户凭证要包含在跨域请求中时为true。当在跨域请求中将它们排除在外时,以及在响应中忽略cookie时,为False。最初是错误的。

这样:

client.withCredentials = true;
Run Code Online (Sandbox Code Playgroud)

仅当http://localhost:8080使用一种受支持的方法(例如,在HTTP Set-Cookie 响应标头中)设置cookie时,此方法才有效。


否则,您将不得不对要放入Cookie的数据进行编码。

  • 那么你就不能为此使用 cookie。正如我所说,您无法在跨源 XHR 请求上设置 cookie 客户端。 (2认同)

PDS*_*tat 7

这也可以通过更现代的方式来完成fetch

fetch(url, {
    method: 'POST',
    credentials: 'include'
    //other options
}).then(response => console.log("Response status: ", response.status));
Run Code Online (Sandbox Code Playgroud)

  • 不。 `fetch` **和** `XHR` 都可以让您告诉浏览器发送它为请求中的 URL 存储的任何 cookie,但这个问题是关于使用 JavaScript **手动** 添加 cookie。 (2认同)