Як передаються файли cookie в протоколі HTTP?


Відповіді:


295

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

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

Якщо набір файлів cookie є, браузер надсилає наступне у своєму заголовку запиту.

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

Додаткову інформацію див. У статті Wiki Cookie у Вікіпедії.


Це правда, що файл cookie працює лише з дієсловом GET / POST, але не ЗВ'ЯЗКОВО?
PerlDev

5
@PerlDev Я нічого не бачу в rfc2109, який говорить про те, що він не повинен працювати з запитами, відмінними від GET / POST, але я підозрюю, що браузер і серверні реалізації можуть не реалізувати його в тих випадках.
deinst

5
Зауважте, що згідно з RFC 2109, якщо користувальницький агент або браузер надсилає декілька файлів cookie, вони Cookie: name1=value1; name2=value2; ...
помістять

34

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


2
тому в будь-якому запиті, який було зроблено, чи всі файли cookie ipso facto надсилаються?
BKSpurgeon

32

Крім того, що написано в інших відповідях, інші деталі, пов’язані з трактом файлу cookie, максимальним віком файлу cookie, захищеним він чи не, також передаються у заголовку відповіді Set-Cookie. Наприклад:

Set-Cookie:=значення імені [ ; expires=дата ] [ ; domain=домен ] [ ; path=шлях ] [ ; secure]


Однак не всі ці дані клієнт передає назад на сервер під час наступного HTTP-запиту.

Ви також можете встановити HttpOnlyпрапор в кінці файлу cookie, щоб вказати, що ваш файл cookie є httpsly та не повинен бути доступний, у скриптах за допомогою коду JavaScript. Це допомагає запобігти атакам, таким як викрадення сеансу.

Для отримання додаткової інформації див. RFC 2109 . Подивіться також статтю Ніколаса Закаса, пояснили файли cookie HTTP .


2
Ось пряме посилання на статтю Закаса, а не зворотне посилання: humanwhocodes.com/blog/2009/05/05/http-cookies- пояснив
Джозеф Дікстра

13

створити приклад сценарію в якості 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"

потім зробіть виконуваний файл і виконати так.

./resp | nc -l -p 12346

відкрити браузер і переглянути URL-адресу: http: // localhost: 1236 ви побачите значення Cookie, яке надсилає браузер

    [aaa @ bbbbbbbb] $ ./resp | nc -l -p 12346
    GET / HTTP / 1.1
    Ведучий: xxx.xxx.xxx.xxx:12346
    З'єднання: продовжуйте жити
    Кеш-контроль: max-age = 0
    Прийняти: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, * / *; q = 0.8
    Оновлення-небезпечні запити: 1
    Користувач-агент: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, як і Gecko) Chrome / 49.0.2623.112 Safari / 537.36
    Accept-Encoding: gzip, deflate, sdch
    Мова прийняття: en-US, en; q = 0,8, ru; q = 0,6
    Cookie: ім'я = F

3
Що робити, якщо є декілька файлів cookie? Вони розділені комами?
Марк Буйкема

думаю, що вони встановлені як новий файл cookie. Cookie: name = F Cookie: name = A
EAzevedo

2
@MarkBuikema, див. Docs.microsoft.com/en-us/windows/desktop/wininet/http-cookies . Вони надсилаються як: Cookie: <ім'я> = <значення> [; <ім'я> = <значення>] ...
Ben Wheeler
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.