7.1 Заголовок Keep-Alive

И еще несколько полезных заголовков. Заголовок Keep-Alive указывает серверу, что соединение нужно оставить открытым: сервер не будет закрывать соединение сразу после отправки ответа. Это приведет к тому, что следующий запрос от этого же клиента к серверу будет выполнен быстрее.

Пример такого заголовка:


           Connection: Keep-Alive
        

Но если все клиенты будут требовать постоянного соединения, тогда проблемы начнутся уже у сервера. Сервер будет или недоступен, или начнет закрывать соединения по своему выбору.

7.2 Заголовок Cache-Control

С помощью заголовка Cache-Control можно управлять кэшированием контента. Грамотно настроенное кэширование ускоряет работу с контентом, криво настроенное создает проблемы на ровном месте.

Чтобы отключить кэширование нужно написать такой заголовок:


           Cache-Control: no-cache, no-store, must-revalidate
        

В кэше не должно сохраняться ничего — ни по запросам клиента, ни по ответам сервера. Запрос всегда отправляется на сервер, ответ всегда загружается полностью.

Также можно включить самый примитивный и надежный тип кэширования:


           Cache-Control: no-cache
        

Перед тем, как выдать копию, кэш запрашивает исходный сервер на предмет актуальности ресурса.

Можно указать время кэширования ресурса в секундах. Выглядеть такой заголовок будет так:


           Cache-Control: max-age=31536000
        

Этот заголовок задает максимальное время хранения контента в кэше.

Более детально про кеширование ты можешь почитать тут

7.3 Cookie

Сервер может хранить данные на стороне клиента. Такие данные называются cookie. Впрочем, cookie может сохранить и клиент. Они бывают очень полезны обеим сторонам.

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

Вот как выглядит Cookie в запросе:


          Cookie: name=value;name2=value2;nameN=valueN00
        

Cookie обычно хранит браузер и они привязаны к определенному домену. Когда ты снова заходишь на тот же домен, cookie автоматически добавляются к http-запросу и http-ответу. Сервер/домен не может получить cookie, которые хранит в браузере другой сервер/домен.

У каждого cookie есть 4 основных параметра:

  • имя;
  • значение;
  • время действия (сколько времени их хранить);
  • домен, к которому привязаны cookie.

Cookie хранятся и передаются в текстовом виде, так что и имя, и значение – это строки. Если время действия cookie не указано, то они уничтожаются после закрытия браузера.

7.4 Session

После того, как пользователь залогинился на сайте, говорят, что между сайтом и сервером установилась сессия.

Сервер у себя создает специальный объект – HttpSession, где хранит всю нужную информацию для работы с авторизованным клиентом. А уникальный номер этого объекта хранит в браузере в виде Cookie.

Веб-сервера на Java обычно используют имя JSESSIONID для хранения идентификатора сессии. Выглядит это примерно так:


          Cookie: JSESSIONID =ABAD1D
        

На стороне сервера можно задать время существования сессии, а также то, будет ли она автоматически закрываться при закрытии браузера.