LINUX.ORG.RU

Как браузер определяет какой пакет какой вкладке соответствует, если сайт один

 


1

2

Например, я открыл 2 вкладки в браузере с видео на ютубе. Как браузер определяет какие пакеты соответствуют какой вкладке? Ведь там и порты одинаковые, и отправитель — короче, по заголовкам нет возможности определить.

Вопрос вроде нубский, но сам до ответа я не могу додуматься.


Ответ на: комментарий от i-rinat

Мда, эпик фейл. Я почему-то думал, что и браузер получает на 80 порт. А там для каждой вкладке свой.

letni
() автор топика
Ответ на: комментарий от i-rinat

Не совсем правильный ответ. Не нужно забывать, что в протоколе HTTP1.1 добавили режим «постоянного соединения»: TCP-соединение может оставаться открытым после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Поэтому современные браузеры с современными серверами могут общаться в рамках одного соединения. И только браузер решает, использовать для разных вкладок разные соединения или переиспользовать существующее.

anonymous00 ★★
()
Ответ на: комментарий от anonymous00

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

letni
() автор топика
Ответ на: комментарий от letni

Я почему-то думал, что и браузер получает на 80 порт.

Порты с номерами менее 1024 включительно являются привилегированными и для того, чтобы их пользовать нужны права рута в момент «привязки».

imul ★★★★★
()

Вкратце:

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

* HTTP, который работает поверх TCP, ничего не знает о пакетах, для него есть непрерывный кусок данных, которые пришли (или которые он отправляет). В протоколе описано, какие последовательности отделяют заголовок HTTP от тела запроса/ответа (конкретно <CR><LF><CR><LF>, оно же «\r\n\r\n»). Т.е., клиент/сервер HTTP считывает данные, пока не будет встречена вышеупомянутая последовательность. Тогда он знает, что считал заголовок, и обрабатывает его. В заголовке есть поле Content-Length, где указана длина данных после заголовка. После считывания количества байт Content-Length уже начинается новое сообщение, где всё так же.

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

А конкретно серверу всё равно, как получать данные, вся нужная информация для обработки запроса передается каждый раз в HTTP-запросе, в том числе и куки.

anonymous00 ★★
()

Из минусов модели, когда одно соединение используется несколькими вкладками с одним и тем же сайтом, в том, что медленная обработка и ответ сервера для одной вкладки будет тормозить общение с сервером из других вкладок, ведь придётся ждать, пока сервер полностью ответит, а если там сложный запрос к БД, который выполняется несколько десятков секунд?

Эту проблему призван решить HTTP/2 с мультиплексированием запросов.

anonymous00 ★★
()
Ответ на: комментарий от anonymous00

И только браузер решает, использовать для разных вкладок разные соединения или переиспользовать существующее.

В самом простом случае без keep-alive используется по соединению на запрос. Иными словами одна вкладка может создать множество соединений.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.