Come vengono trasmessi i cookie nel protocollo HTTP?


Risposte:


296

Il server invia quanto segue nell'intestazione della risposta per impostare un campo cookie.

Set-Cookie:valore del nome=

Se è stato impostato un cookie, il browser invia quanto segue nell'intestazione della richiesta.

Cookie:valore del nome=

Consulta l' articolo sui cookie HTTP su Wikipedia per ulteriori informazioni.


È vero che il cookie funziona solo con il verbo GET / POST, ma non CONNECT?
Perlev,

5
@PerlDev Non c'è nulla che io possa vedere in rfc2109 che dica che non dovrebbe funzionare con richieste diverse da GET / POST, ma sospetto che le implementazioni del browser e del server non possano implementarlo in quei casi.
dal

5
Si noti che secondo RFC 2109 se un agente utente o un browser invia più cookie, li inserirà in un unico campo delimitato da punti e virgola:Cookie: name1=value1; name2=value2; ...
jotrocken

34

I cookie vengono passati come intestazioni HTTP, sia nella richiesta (client -> server), sia nella risposta (server -> client).


2
quindi in ogni richiesta che viene fatta, vengono inviati tutti i cookie ipso facto?
BKSpurgeon,

32

A parte ciò che è scritto in altre risposte, altri dettagli relativi al percorso del cookie, all'età massima del cookie, indipendentemente dal fatto che sia protetto o meno, sono passati anche nell'intestazione della risposta Set-Cookie. Per esempio:

Set-Cookie:nome =valore [ ; expires=data ] [ ; domain=dominio ] [ ; path=percorso ] [ ; secure]


Tuttavia, non tutti questi dettagli vengono restituiti al server dal client durante la successiva richiesta HTTP.

Puoi anche impostare HttpOnlyflag alla fine del tuo cookie, per indicare che il tuo cookie è httponly e non deve poter accedere, negli script tramite codice javascript. Questo aiuta a prevenire attacchi come il dirottamento della sessione.

Per ulteriori informazioni, consultare RFC 2109 . Dai un'occhiata anche all'articolo di Nicholas C. Zakas, spiegano i cookie HTTP .


2
Ecco un link diretto all'articolo di Zakas, piuttosto che un link di ritorno
Joseph Dykstra

13

creare uno script di esempio come resp:

#!/bin/bash

http_code=200
mime=text/html

echo -e "HTTP/1.1 $http_code OK\r"
echo "Content-type: $mime"
echo
echo "Set-Cookie: name=F"

quindi rendere eseguibile ed eseguire in questo modo.

./resp | nc -l -p 12346

apri il browser e sfoglia l'URL: http: // localhost: 1236 vedrai il valore del cookie che viene inviato dal browser

    [aaa @ bbbbbbbb] $ ./resp | nc -l -p 12346
    GET / HTTP / 1.1
    Host: xxx.xxx.xxx.xxx:12346
    Connessione: keep-alive
    Controllo cache: età massima = 0
    Accetta: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, * / *; q = 0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, come Gecko) Chrome / 49.0.2623.112 Safari / 537.36
    Accetta-codifica: gzip, deflate, sdch
    Accept-Language: en-US, en; q = 0.8, ru; q = 0.6
    Cookie: nome = F

3
Cosa succede se ci sono più cookie? Sono separati da una virgola?
Mark Buikema,

pensa che siano impostati come nuovi cookie. Cookie: nome = F Cookie: nome = A
EAzevedo,

2
@MarkBuikema, consultare docs.microsoft.com/en-us/windows/desktop/wininet/http-cookies . Vengono inviati come: Cookie: <name> = <value> [; <name> = <value>] ...
Ben Wheeler
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.