web-dev-qa-db-ja.com

$ httpはリクエストでCookieを送信しません

AngularJSとJavaサーブレットを使用したRESTful Webサービスに取り組んでいます。ユーザーがログインすると、バックエンドはフロントエンドに「Set-Cookie」ヘッダーを送信します。 Angularでは、$cookies(ngCookie-モジュール)を介してヘッダーにアクセスし、設定します。 enter image description here

ユーザーはログインしたので、たとえばいくつかのものを削除できます。したがって、フロントエンドはGETリクエストをバックエンドに送信します。異なるドメインで作業するため、いくつかのCORSヘッダーを設定する必要があり、Angularは実際のGET要求の前にOPTIONS要求を実行します。

OPTIONSリクエスト: OPTIONS request

GETリクエスト GET request

これはAngularで$ httpモジュールを介して行いますが、JSESSIONIDを含むCookieを送信しません。

Angularを有効にしてCookieを送信するにはどうすればよいですか?

69
Tim Dau

構成で、DI $httpProviderを指定し、withCredentialsをtrueに設定します。

.config(function ($httpProvider) {
    $httpProvider.defaults.withCredentials = true;
    //rest of route code
})

資格情報付きのangularjsに関する情報: http://docs.angularjs.org/api/ng.$http

Mozillaの記事へのリンク: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#section_5

133
Mathew Berg
$http.get("URL", { withCredentials: true })
  .success(function(data, status, headers, config) {})
  .error(function(data, status, headers, config) {});

留意すべきもう1つのこと:サードパーティのCookieを有効にするにする必要があります。 Chromeでグローバルに無効にしている場合は、ドメイン名の左側にある「i」記号をクリックしてからCookieをクリックし、ターゲットドメインを「ブロック」してブロックを解除します。

11
Daniel F