为什么RESTful API会通过API响应发送Cookie?

时间:2018-01-13 09:39:28

标签: rest cookies twitter api-design

前几天,在向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

1 个答案:

答案 0 :(得分:6)

RESTful API可以发送cookie,就像提供HTML的常规Web应用程序一样。 Cookies本身并不违反REST策略,这就是它们的使用方式。例如,服务器可能希望其客户端记住某个状态,以便在以后请求另一个资源时可以提供此状态。

但是,如果Cookie用于在服务器上维护客户端会话,例如Session Token,则REST API不应使用它们。这将违反REST端点的无状态性,因为要求服务器知道每个客户端的状态才能为它们提供请求的资源。

现在,您提到您的特定REST端点设置了tracking cookie。这可能是完全有效的,因为可以将跟踪ID视为应保留的客户端属性。服务器可能不需要此cookie来提供请求的资源。

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