Страницы

Поиск по вопросам

понедельник, 15 июля 2019 г.

Повторный запрос к серверу

Клиент запрашивает с помощью HTTP страницу от сервера (+ заголовки и прочее) и получает её в ответ, но говорят, что если там есть картинки или другие файлы, то он делает ещё один запрос? Это правда так? Когда он делает повторный запрос на сервер? При наличии в html-коде отданой странички ссылки на файлы, которые размещены на сервере?


Ответ

Это так. Клиент может получать от сервера разные ответы. И если это html, браузеру нужно вывести этот документ на экран, проходя по нему и строя дерево DOM. Если браузер обнаруживает в документе ссылки на ресурсы - он загружает их.
Каждый загруженный ресурс также обрабатывается. И, например, если в css браузер обнаруживает ссылки на другие ресурсы - он начинает загружать и их тоже. А если в них также попадаются ссылки на другие ресурсы - браузер запросит и их тоже.
Вы можете пронаблюдать за этим сами - откройте веб-инспектор в вашем браузере, например в Chrome, на вкладке Network:

Первая строка - запрос html-документа. Последующие - запросы ресурсов из документа, и затем ресурсов из ресурсов. Все по схеме, описанной выше.
В ряде строк можно заметить надпись "Повторный-запрос-к-серверу". Фраза такая же, как название вашего вопроса. Возможно, вы хотели узнать именно об этом? Такая фраза в инспекторе (вместе со статусом 304) значит, что данный ресурс с сервера уже был закачан ранее, и с момента последней закачки не изменился. Значит смысла снова качать его - нет, и можно взять этот ресурс из кеша браузера.
Это называется http-кеширование, и реализуется за счет передачи в http-запросе заголовка ETag. При отдаче ресурса в первый раз, с ним передается некий ключ Etag (например, такой - 6d82cbb050ddc7fa9cbb659014546e59), он формируется на сервере на основе содержимого запрашиваемого файла и даты его изменения. Сема такая:
Во время первого запроса браузер сохраняет файл и ETag в кеше Во время повторного запроса браузер отсылает на сервер значение ETag Если файл за это время не изменился, ETag у него будет такой же, как и в прошлый раз. Сервер сравнивает это значение ETag с пришедшим от браузера, и, если они одинаковые - не отправляет файл браузеру, а отправляет короткий статус 304. По статусу 304 браузер понимает, что файл с прошлого запроса не был изменен, значит можно смело использовать этот файл из кеша.
Подробнее об этом вы можете прочесть в этой статье от google

Комментариев нет:

Отправить комментарий