web-dev-qa-db-ja.com

RESTful APIがAPI応答とともにCookieを送信するのはなぜですか?

先日、Twitterにリクエストを送信した後、クライアントで奇妙な警告が表示されました。

2018-01-12 02:32:50,162 WARN o.a.h.c.p.ResponseProcessCookies:130 - Invalid cookie header: "set-cookie: guest_id=v1%3A151572431977858379; Expires=Sun, 12 Jan 2020 02:31:59 UTC; Path=/; Domain=.Twitter.com". Invalid 'expires' attribute: Sun, 12 Jan 2020 02:31:59 UTC

形式は正しいので、結局それはhttpクライアントの設定ミスですが、それでは私に疑問が残ります:RESTful APIはなぜCookieを送信するのですか?

これらはTwitterのトラッキングCookieのように見えるので、RESTfulなコンテキストでそれらはどのように使用されますか? (サーバー側ではなく)XMLHttpRequestを介して呼び出された場合、TwitterはCookieを設定しますか、それともAPIエンドポイントに誤って適用した汎用の「Cookie設定」フィルターですか?

問題はTwitterだけではなく、一般にRESTful APIについてです。

以下は、生の応答からの抜粋です。

Server:
    tsa_b
pragma:
    no-cache
cache-control:
    no-cache, no-store, must-revalidate, pre-check=0, post-check=0
x-connection-hash:
    24fd4a4b3d61e33b6b94080b710a1e61
x-xss-protection:
    1; mode=block; report=https://Twitter.com/i/xss_report
x-content-type-options:
    nosniff
x-rate-limit-limit:
    900
expires:
    Tue, 31 Mar 1981 05:00:00 GMT
Date:
    Fri, 12 Jan 2018 17:45:03 GMT
set-cookie:
    personalization_id="v1_/3EYpbQnCe+vnjhnBUew=="; Expires=Sun, 12 Jan 2020 17:45:03 UTC; Path=/; Domain=.Twitter.com
set-cookie:
    lang=en; Path=/
set-cookie:
    guest_id=v1%3A1515770330954116; Expires=Sun, 12 Jan 2020 17:45:03 UTC; Path=/; Domain=.Twitter.com
x-rate-limit-reset:
    1515780003
content-disposition:
    attachment; filename=json.json
9
Bozho

RESTful APIは、HTMLを提供する通常のWebアプリケーションと同じようにCookieを送信できます。 Cookie自体はRESTポリシーに違反していません。Cookieの使用方法です。たとえば、サーバーがクライアントに特定の状態を記憶させ、後で別のリソースを要求するときにこの状態を提供できるようにする場合があります。

ただし、Session Tokenなど、サーバー上でクライアントセッションを維持するためのものである場合は、REST AP​​IでCookieを使用しないでください。サーバーは、要求されたリソースをクライアントに提供するために各クライアントの状態を知る必要があるため、RESTエンドポイントのステートレス性に違反します。

これで、特定のRESTエンドポイントがtracking cookieを設定すると説明しました。追跡IDは永続化する必要があるクライアントのプロパティと見なすことができるため、これは完全に有効な場合があります。このCookieは、サーバーが要求されたリソースを提供するためにサーバーで必要になることはおそらくありません。

これは、StackExchangeのこの質問にも関連している可能性があります: RESTful APIでCookieを使用する必要がありますか?

1
ggradnig