Как куки передаются по протоколу HTTP? - PullRequest
225 голосов
/ 12 августа 2010

Как куки передаются по протоколу HTTP?

Ответы [ 4 ]

275 голосов
/ 12 августа 2010

Сервер отправляет следующее в своем заголовке ответа для установки поля cookie.

Set-Cookie: имя = значение

Если установлен набор файлов cookie, браузер отправляет в заголовок запроса следующее:

Cookie: имя = значение

Подробнее читайте в статье HTTP Cookie в Википедии.

31 голосов
/ 12 августа 2010

Файлы cookie передаются в виде заголовков HTTP как в запросе (клиент -> сервер), так и в ответе (сервер -> клиент).

27 голосов
/ 04 ноября 2015

Помимо того, что написано в других ответах, в заголовке ответа Set-Cookie также передаются другие подробности, связанные с путем cookie, максимальным возрастом cookie, независимо от того, защищен он или нет. Например:

Set-Cookie: имя = значение [; expires= дата ] [; domain= домен ] [; path= путь ] [; secure]


Однако не все эти данные передаются обратно на сервер клиентом при выполнении следующего HTTP-запроса.

Вы также можете установить флаг HttpOnly в конце вашего файла cookie, чтобы указать, что ваш файл cookie является httponly и к нему нельзя разрешать доступ в сценариях с использованием кода JavaScript. Это помогает предотвратить атаки, такие как перехват сеансов.

Для получения дополнительной информации см. RFC 2109 . Также посмотрите на Статья Николаса С. Закаса, HTTP cookie объяснил .

13 голосов
/ 24 апреля 2016

создайте пример сценария как:

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

, затем сделайте исполняемым и выполните так.

./resp | nc -l -p 12346

откройте браузер и просмотрите URL: http://localhost:1236 вы увидите значение Cookie, отправленное браузером

    [aaa@bbbbbbbb ]$ ./resp | nc -l -p 12346
    GET / HTTP/1.1
    Host: xxx.xxx.xxx.xxx:12346
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8,ru;q=0.6
    <b>Cookie: name=F</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...