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.


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.


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 .


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.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.