¿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.


¿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).


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 .


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.