Wie werden Cookies im HTTP-Protokoll übergeben?

Antworten:

296

Der Server sendet in seinem Antwortheader Folgendes, um ein Cookie-Feld festzulegen.

Set-Cookie:Name =Wert

Wenn ein Cookie gesetzt ist, sendet der Browser Folgendes in seinem Anforderungsheader.

Cookie:Name =Wert

Weitere Informationen finden Sie im HTTP-Cookie- Artikel bei Wikipedia.

deinst
quelle
Stimmt es, dass das Cookie nur mit dem Verb GET / POST funktioniert, nicht aber mit CONNECT?
PerlDev
5
@PerlDev Es gibt nichts , dass ich in sehen kann rfc2109 , der sagt , dass es nicht die Arbeit mit anderen Anforderungen als GET / POST, aber ich vermute , dass die Browser und Server - Implementierungen können implementieren es in diesen Fällen nicht.
Deinst
5
Beachten Sie, dass gemäß RFC 2109, wenn ein Benutzeragent oder Browser mehrere Cookies sendet, diese in ein einzelnes Feld gesetzt werden, das durch Semikolons begrenzt ist:Cookie: name1=value1; name2=value2; ...
jotrocken
34

Cookies werden als HTTP-Header sowohl in der Anforderung (Client -> Server) als auch in der Antwort (Server -> Client) übergeben.

Douglas Leeder
quelle
2
Werden also bei jeder Anfrage alle Cookies ipso facto gesendet?
BKSpurgeon
32

Abgesehen von dem, was in anderen Antworten geschrieben steht, werden andere Details in Bezug auf den Pfad des Cookies, das maximale Alter des Cookies, ob es gesichert ist oder nicht, auch im Set-Cookie-Antwortheader übergeben. Zum Beispiel:

Set-Cookie:Name =Wert [ ; expires=Datum ] [ ; domain=Domain ] [ ; path=Pfad ] [ ; secure]


Bei der nächsten HTTP-Anforderung werden jedoch nicht alle diese Details vom Client an den Server zurückgegeben.

Sie können auch das HttpOnlyFlag am Ende Ihres Cookies setzen, um anzuzeigen, dass Ihr Cookie nur http ist und in Skripten mit Javascript-Code nicht darauf zugreifen darf. Dies hilft, Angriffe wie Sitzungsentführungen zu verhindern.

Weitere Informationen finden Sie unter RFC 2109 . Schauen Sie sich auch den Artikel von Nicholas C. Zakas an, in dem HTTP-Cookies erklärt werden .

Mangu Singh Rajpurohit
quelle
2
Hier ist ein direkter Link zu Zakas 'Artikel und kein Wayback-Link: humanwhocodes.com/blog/2009/05/05/http-cookies-explained
Joseph Dykstra
13

Beispielskript erstellen als:

#!/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"

dann ausführbar machen und so ausführen.

./resp | nc -l -p 12346

Öffnen Sie den Browser und durchsuchen Sie die URL: http: // localhost: 1236. Sie sehen den Cookie-Wert, der vom Browser gesendet wird

    [aaa @ bbbbbbbb] $ ./resp | nc-l-p 12346
    GET / HTTP / 1.1
    Host: xxx.xxx.xxx.xxx:12346
    Verbindung: am Leben bleiben
    Cache-Kontrolle: maximales Alter = 0
    Akzeptieren Sie: Text / HTML, Anwendung / xhtml + xml, Anwendung / xml; q = 0,9, Bild / Webp, * / *; q = 0,8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, wie Gecko) Chrome / 49.0.2623.112 Safari / 537.36
    Accept-Encoding: gzip, deflate, sdch
    Akzeptiersprache: en-US, en; q = 0,8, ru; q = 0,6
    Cookie: Name = F.
FariZ
quelle
3
Was ist, wenn mehrere Cookies vorhanden sind? Sind sie durch Kommas getrennt?
Mark Buikema
Ich denke, sie werden als neuer Cookie gesetzt. Cookie: Name = F Cookie: Name = A
EAzevedo
2
@MarkBuikema, siehe docs.microsoft.com/en-us/windows/desktop/wininet/http-cookies . Sie werden gesendet wie: Cookie: <Name> = <Wert> [; <Name> = <Wert>] ...
Ben Wheeler