¿Cómo se pasan las cookies en el protocolo HTTP?

Respuestas:

296

El servidor envía lo siguiente en su encabezado de respuesta para establecer un campo de cookie.

Set-Cookie:valor de nombre=

Si hay un conjunto de cookies, el navegador envía lo siguiente en su encabezado de solicitud.

Cookie:valor de nombre=

Consulte el artículo sobre cookies HTTP en Wikipedia para obtener más información.

deinst
fuente
¿Es cierto que la cookie solo funciona con el verbo GET / POST, pero no CONNECT?
PerlDev
55
@PerlDev No hay nada que pueda ver en rfc2109 que diga que no debería funcionar con solicitudes que no sean GET / POST, pero sospecho que las implementaciones del navegador y el servidor pueden no implementarlo en esos casos.
deinst
55
Tenga en cuenta que, de acuerdo con RFC 2109, si un agente de usuario o navegador envía varias cookies, las colocará en un solo campo delimitado por punto y coma:Cookie: name1=value1; name2=value2; ...
jotrocken
34

Las cookies se pasan como encabezados HTTP, tanto en la solicitud (cliente -> servidor) como en la respuesta (servidor -> cliente).

Douglas Leeder
fuente
2
entonces, en cualquier solicitud que se haga, ¿se envían todas las cookies ipso facto?
BKSpurgeon
32

Además de lo que está escrito en otras respuestas, otros detalles relacionados con la ruta de la cookie, la antigüedad máxima de la cookie, ya sea segura o no, también se pasan en el encabezado de respuesta Set-Cookie. Por ejemplo:

Set-Cookie:nombre =valor [ ; expires=fecha ] [ ; domain=dominio ] [ ; path=ruta ] [ ; secure]


Sin embargo, el cliente no pasa todos estos detalles al servidor cuando realiza la siguiente solicitud HTTP.

También puede establecer un HttpOnlyindicador al final de su cookie, para indicar que su cookie es httponly y no se debe permitir su acceso, en scripts por código javascript. Esto ayuda a prevenir ataques como el secuestro de sesión.

Para más información, vea RFC 2109 . También eche un vistazo al artículo de Nicholas C. Zakas, explicaron las cookies HTTP .

Mangu Singh Rajpurohit
fuente
2
Aquí hay un enlace directo al artículo de Zakas, en lugar de un enlace de retroceso
Joseph Dykstra
13

crear script de ejemplo 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"

luego haga ejecutable y ejecute de esta manera.

./resp | nc -l -p 12346

abra el navegador y busque la URL: http: // localhost: 1236 verá el valor de la cookie que envía el navegador

    [aaa @ bbbbbbbb] $ ./resp | nc -l -p 12346
    GET / HTTP / 1.1
    Anfitrión: xxx.xxx.xxx.xxx:12346
    Conexión: mantener vivo
    Control de caché: max-age = 0
    Aceptar: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, * / *; q = 0.8
    Solicitudes de actualización inseguras: 1
    Agente de usuario: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 49.0.2623.112 Safari / 537.36
    Aceptar-Codificación: gzip, desinflar, sdch
    Idioma de aceptación: en-US, en; q = 0.8, ru; q = 0.6
    Cookie: nombre = F
FariZ
fuente
3
¿Qué pasa si hay varias cookies? ¿Están separados por comas?
Mark Buikema
piensan que están configurados como una nueva cookie. Cookie: nombre = F Cookie: nombre = A
EAzevedo
2
@ MarkBuikema, ver docs.microsoft.com/en-us/windows/desktop/wininet/http-cookies . Se envían como: Cookie: <name> = <value> [; <name> = <value>] ...
Ben Wheeler