Каждый веб-запрос отправляет файлы cookie браузера? - PullRequest
164 голосов
/ 26 августа 2009

Каждый веб-запрос отправляет куки браузера?

Я говорю не о просмотрах страниц, а о запросе изображения, .js файла и т. Д.

Обновление Если веб-страница содержит 50 элементов, это 50 запросов. Почему он отправляет одинаковые файлы cookie для каждого запроса, не кэширует или не знает, что он уже есть?

Ответы [ 7 ]

169 голосов
/ 26 августа 2009

Да, если запрошенный URL-адрес находится в том же домене, и путь, определенный в файле cookie (и все другие ограничения - безопасный, httponly, срок действия не истек и т. Д.), То файл cookie будет отправляться для каждого запрос.

81 голосов
/ 26 августа 2009

Как уже говорили другие, если ограничения на хост, путь и т. Д. Cookie будут выполнены, он будет отправлен 50 раз.

Но вы также спросили, почему: потому что куки являются функцией HTTP, а HTTP не имеет состояния. HTTP предназначен для работы без сохранения сервером какого-либо состояния между запросами.

На самом деле сервер не имеет точного способа определить, какой пользователь отправляет данный запрос; за одним веб-прокси может быть тысяча пользователей (и, следовательно, IP-адрес). Если файлы cookie не отправляются при каждом запросе, сервер не сможет узнать, какой пользователь запрашивает какой-либо ресурс.

Наконец, браузер не имеет ни малейшего представления, нужен ли серверу куки или нет, он просто знает, что сервер дал команду отправить куки для любого запроса на foo.com, так что он делает это. Иногда изображения нуждаются в них (например, динамически генерируемых для каждого пользователя), иногда нет, но браузер не может сказать.

16 голосов
/ 26 августа 2009

Да. Каждый запрос отправляет куки, которые принадлежат одному домену. Они не кэшируются, поскольку HTTP не имеет состояния, что означает, что каждого запроса должно быть достаточно, чтобы сервер выяснил, что с ним делать. Скажем, у вас есть изображения, которые доступны только определенным пользователям; Вы должны отправлять свой cookie-файл авторизации с каждым из этих 50 запросов, чтобы сервер знал, что это вы, а не кто-то другой или гость, из пула запросов, которые он получает.

Сказав это, куки не могут быть отправлены с учетом других ограничений, упомянутых в других ответах, таких как настройка HTTPS, путь или домен. Особенно важно отметить: куки не распределяются между доменами. Это помогает уменьшить размер HTTP-вызовов для статических файлов, таких как упомянутые вами изображения и сценарии.
Пример: у вас есть 4 куки на www.stackoverflow.com; если вы сделаете запрос на www.stackoverflow.com/images/logo.png, все эти 4 куки будут отправлены.
Однако, если вы запросите stackoverflow.com/images/logo.png (обратите внимание на изменение субдомена) или images.stackoverflow.com/logo.png, эти 4 cookie-файла не будут присутствовать - но, возможно, те, которые связаны с этими доменами, будут.

Подробнее о файлах cookie и изображениях, запрашивающих, например, можно прочитать в этом сообщении в блоге StackOverflow .

5 голосов
/ 14 августа 2012

3 года прошло

Есть еще одна причина, по которой браузер не отправляет куки. Некоторые коды могут использовать атрибут объекта crossOrigin для анонимности, чтобы предотвратить отправку файлов cookie.

4 голосов
/ 10 января 2017

Нет. Не каждый запрос отправляет куки. Это зависит от конфигурации cookie и соединения клиент-сервер.

Например, если для параметра cookie secure установлено значение true, его необходимо передавать по безопасному HTTPS-соединению. Означает, что когда вы видите этот веб-сайт с протоколом HTTP, эти файлы cookie не будут отправляться браузерами, так как установлен флаг безопасности.

3 голосов
/ 25 июля 2017

Cookie имеет свойство path. Если «путь = /», ответ - Да.

3 голосов
/ 08 августа 2014

Я знаю, что это старая тема. Но я только что заметил, что большинство браузеров не будут отправлять куки для домена, если вы добавите конечную точку. Например, http://example.com. не получит файлы cookie, установленные для .example.com. Apache, с другой стороны, рассматривает их как один и тот же хост. Я считаю это полезным, чтобы усложнить отслеживание междоменных доменов для внешних ресурсов, которые я включаю, но вы также можете использовать его из соображений производительности. Обратите внимание, что это тормозит проверку https сертификатов. Я провел несколько тестов, используя браузерные снимки и мои собственные устройства. Хак работает практически во всех браузерах, кроме сафари (для мобильных и настольных компьютеров), которые будут включать куки в запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...