web-dev-qa-db-ja.com

HTTPでCookieを送信POST JavaScriptでリクエスト

私はPOSTサーバーへのリクエスト(これはRESTサービスです)をjavascript経由で行います。サーバー側で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
}
10
arpit joshi

ドキュメント を参照してください:

ヘッダーが次のヘッダーのいずれかで大文字と小文字を区別しない場合は、これらの手順を終了します…Cookie

XHRを使用してCookieヘッダーを明示的に設定することはできません。


Origin間リクエストを作成しているようです(絶対URIを使用しています)。

withCredentials を設定して、Cookieを含めることができます。

ユーザー資格情報がクロスオリジンリクエストに含まれる場合はtrue。クロスオリジンリクエストで除外される場合、およびレスポンスでCookieが無視される場合はfalse。最初は偽。

そのような:

client.withCredentials = true;

これは、http://localhost:8080は、サポートされているメソッド(HTTP Set-Cookieresponseヘッダー)。


それに失敗すると、クッキーに入れたいデータをどこかにエンコードする必要があります。

7
Quentin

これは、最新のfetchでも実行できます。

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