Como os cookies são transmitidos no protocolo HTTP?

Respostas:

296

O servidor envia o seguinte em seu cabeçalho de resposta para definir um campo de cookie.

Set-Cookie:valor do nome=

Se houver um conjunto de cookies, o navegador envia o seguinte no cabeçalho da solicitação.

Cookie:valor do nome=

Veja o artigo sobre cookies HTTP na Wikipedia para mais informações.

deinst
fonte
É verdade que o cookie funciona apenas com o verbo GET / POST, mas não com CONNECT?
PerlDev 13:12
5
@PerlDev Não há nada que eu possa ver no rfc2109 que diga que ele não deve funcionar com solicitações que não sejam GET / POST, mas eu suspeito que as implementações do navegador e do servidor não possam implementá-lo nesses casos.
31812
5
Note-se que de acordo com a RFC 2109 , se um agente de usuário ou navegador envia vários cookies, ele vai colocá-los em um único campo delimitado por ponto e vírgula:Cookie: name1=value1; name2=value2; ...
jotrocken
34

Os cookies são transmitidos como cabeçalhos HTTP, tanto na solicitação (cliente -> servidor) quanto na resposta (servidor -> cliente).

Douglas Leeder
fonte
2
Assim, em qualquer solicitação feita, todos os cookies são enviados ipso facto?
precisa saber é o seguinte
32

Além do que está escrito em outras respostas, outros detalhes relacionados ao caminho do cookie, idade máxima do cookie, seja ele protegido ou não, também são passados ​​no cabeçalho de resposta Set-Cookie. Por exemplo:

Set-Cookie:nome =valor [ ; expires=data ] [ ; domain=domínio ] [ ; path=caminho ] [ ; secure]


No entanto, nem todos esses detalhes são transmitidos ao servidor pelo cliente ao fazer a próxima solicitação HTTP.

Você também pode definir o HttpOnlysinalizador no final do seu cookie, para indicar que o seu cookie é normal e não deve ser acessado nos scripts por código javascript. Isso ajuda a evitar ataques como seqüestro de sessão.

Para mais informações, consulte RFC 2109 . Veja também o artigo de Nicholas C. Zakas, explicaram os cookies HTTP .

Mangu Singh Rajpurohit
fonte
2
Aqui está um link direto para o artigo de Zákas, em vez de um link wayback: humanwhocodes.com/blog/2009/05/05/http-cookies-explained
Joseph Dykstra
13

crie um exemplo de script como 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"

então torne executável e execute assim.

./resp | nc -l -p 12346

abra o navegador e procure a URL: http: // localhost: 1236, você verá o valor do cookie enviado pelo navegador

    [aaa @ bbbbbbbb] $ ./resp | nc -l -p 12346
    GET / HTTP / 1.1
    Anfitrião: xxx.xxx.xxx.xxx:12346
    Conexão: keep-alive
    Controle de cache: idade máxima = 0
    Aceitar: texto / html, aplicativo / xhtml + xml, aplicativo / xml; q = 0,9, imagem / webp, * / *; q = 0,8
    Solicitações de atualização insegura: 1
    Agente do usuário: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 49.0.2623.112 Safari / 537.36
    Aceitar-codificação: gzip, deflate, sdch
    Idioma de aceitação: en-US, en; q = 0,8, ru; q = 0,6
    Cookie: nome = F
FariZ
fonte
3
E se houver vários cookies? Eles são separados por vírgula?
Mark Buikema
pense que eles estão definidos como um novo cookie. Cookie: nome = F Cookie: nome = A
EAzevedo 26/10
2
@ MarkBuikema, consulte docs.microsoft.com/en-us/windows/desktop/wininet/http-cookies . Eles são enviados como: Cookie: <name> = <valor> [; <name> = <valor>] ...
Ben Wheeler