web-dev-qa-db-fra.com

Pourquoi une API RESTful enverrait-elle des cookies avec la réponse de l'API?

L'autre jour, j'ai reçu un étrange avertissement chez mon client après avoir envoyé des demandes à 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

Le format est correct, donc au final c'est une mauvaise configuration du client http, mais cela me laisse avec la question: pourquoi une API RESTful enverrait-elle des cookies?

Ceux-ci semblent être les cookies de suivi de Twitter, alors à quoi servent-ils dans un contexte RESTful? Twitter souhaite-t-il définir le cookie s'il est invoqué via XMLHttpRequest (plutôt que côté serveur), ou s'agit-il d'un filtre générique "définir cookie" qu'ils ont également appliqué par erreur aux points de terminaison API?

La question ne concerne pas seulement Twitter, mais en général les API RESTful.

Voici un extrait de la réponse brute:

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

Une API RESTful peut envoyer des cookies comme une application Web classique qui sert du HTML. Les cookies en eux-mêmes ne violent pas la politique REST, c'est ainsi qu'ils sont utilisés. Par exemple, le serveur peut vouloir que son client se souvienne d'un certain état, afin qu'il puisse fournir cet état lorsque demander une autre ressource ultérieurement.

Cependant, les cookies ne doivent pas être utilisés par une API REST s'ils sont destinés à maintenir une session client sur le serveur, comme un Session Token. Cela violerait l'apatridie du point de terminaison REST, car le serveur doit connaître l'état de chaque client afin de leur fournir les ressources demandées.

Maintenant, vous avez mentionné que votre point de terminaison spécifique REST définit un tracking cookie. Cela peut être parfaitement valide, car l'ID de suivi peut être considéré comme une propriété du client qui doit être conservée. Ce cookie n'est probablement pas requis par le serveur pour qu'il puisse servir les ressources demandées.

Cela peut également être lié à cette question sur StackExchange: Les cookies doivent-ils être utilisés dans les API RESTful?

1
ggradnig