为什么 RESTful API 会随 API 响应一起发送 cookie?

问题描述 投票:0回答:1

有一天,我在向 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,或者它是一个通用的“设置 cookie”过滤器,他们也错误地应用于 API 端点?

问题不仅仅与 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
rest cookies twitter api-design
1个回答
19
投票

RESTful API 可以像提供 HTML 服务的常规 Web 应用程序一样发送 cookie。 Cookie 并不总是违反 REST 模式。例如,服务器可能希望其客户端记住某个状态,以便稍后在请求另一个资源时可以提供此状态。

但是,如果 REST API 旨在维护服务器上的客户端会话(例如

Session Token
),则不应使用 cookie。这将违反 REST 端点的无状态性,因为服务器需要知道每个客户端的状态,以便为它们提供所请求的资源。

现在,您提到您的特定 REST 端点设置了

tracking cookie
。这可能是完全有效的,因为跟踪 ID 可以被视为客户端的一个属性,应该与每个请求一起发送。服务器可能不需要此 cookie 来提供请求的资源。

这也可能与 StackExchange 上的这个问题有关:Should Cookies be use in RESTful APIs?

© www.soinside.com 2019 - 2024. All rights reserved.