HTTP protokolünde çerezler nasıl aktarılır?


Yanıtlar:


297

Sunucu, bir çerez alanı ayarlamak için yanıt başlığında aşağıdakileri gönderir.

Set-Cookie:isim =değeri

Bir çerez seti varsa, tarayıcı istek başlığında aşağıdakileri gönderir.

Cookie:isim =değeri

Daha fazla bilgi için Wikipedia'daki HTTP Çerezi makalesine bakın .


Çerezin yalnızca GET / POST fiiliyle çalıştığı, ancak CONNECT ile çalışmadığı doğru mu?
PerlDev

5
@PerlDev Ben görebilirsiniz şey yok rfc2109 diyor o GET / POST dışındaki istekleri ile çalışma olmamalı, ama ben tarayıcı ve sunucu uygulamaları bu durumlarda bunu uygulamaya olmayabileceğini itiraf etti.
deinst

5
RFC 2109'a göre, bir kullanıcı aracısı veya tarayıcı birden çok çerez gönderirse, bunları noktalı virgüllerle ayrılmış tek bir alana koyacağını unutmayın:Cookie: name1=value1; name2=value2; ...
jotrocken

34

Çerezler, hem istekte (istemci -> sunucu) hem de yanıtta (sunucu -> istemci) HTTP üstbilgileri olarak iletilir.


2
yani yapılan herhangi bir istek, tüm çerezler ipso facto gönderilir mi?
BKSpurgeon

32

Diğer yanıtlarda yazılanların yanı sıra, çerez yolu, maksimum çerez yaşı, güvenli olup olmadığı, Set-Cookie yanıt başlığında da geçilmiş olsun. Örneğin:

Set-Cookie:ad =değeri [ ; expires=tarih ] [ ; domain=etki alanı ] [ ; path=yol ] [ ; secure]


Ancak, bu ayrıntıların tümü bir sonraki HTTP isteği yapılırken istemci tarafından sunucuya geri gönderilmez.

Ayrıca HttpOnly, javascript koduyla komut dosyalarında, çerezinizin httponly olduğunu ve erişilmesine izin verilmemesi gerektiğini belirtmek için çerezinizin sonundaki bayrağı da ayarlayabilirsiniz . Bu, oturum ele geçirme gibi saldırıları önlemeye yardımcı olur.

Daha fazla bilgi için, bkz. RFC 2109 . HTTP çerezleri , Nicholas C. Zakas'ın makalesine de bir göz atın .


2
İşte bir geri dönüş bağlantısı yerine Zakas'ın makalesine doğrudan bir bağlantı: humanwhocodes.com/blog/2009/05/05/http-cookies-explained
Joseph Dykstra

13

resp olarak örnek komut dosyası oluşturun:

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

sonra çalıştırılabilir hale getirin ve böyle çalıştırın.

./resp | nc -l -p 12346

tarayıcıyı aç ve URL'ye göz at: http: // localhost: 1236 Tarayıcı tarafından gönderilen Çerez değerini göreceksin

    [aaa @ bbbbbbbb] $ ./resp | nc -l -p 12346
    GET / HTTP / 1.1
    Ana bilgisayar: xxx.xxx.xxx.xxx:12346
    Bağlantı: canlı kal
    Önbellek Kontrolü: maks. Yaş = 0
    Kabul et: metin / html, uygulama / xhtml + xml, uygulama / xml; q = 0,9, resim / webp, * / *; q = 0,8
    Yükseltme-Güvensiz İstekler: 1
    Kullanıcı-Aracı: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (GHTo gibi KHTML) Chrome / 49.0.2623.112 Safari / 537.36
    Kabul Et-Kodlama: gzip, deflate, sdch
    Kabul Dili: en-US, en; q = 0,8, ru; q = 0,6
    Çerez: isim = F

3
Birden çok çerez varsa ne olur? Virgülle ayrıldılar mı?
Mark Buikema

yeni bir çerez olarak ayarlandığını düşünüyorum. Çerez: name = F Çerez: name = A
EAzevedo

2
@ MarkBuikema, bkz. Docs.microsoft.com/en-us/windows/desktop/wininet/http-cookies . Onlar şu şekilde gönderilir: Çerez: <name> = <value> [; <name> = <value>] ...
Ben Wheeler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.