Вопрос о веб-браузере и загрузке / выгрузке файлов? - PullRequest
2 голосов
/ 27 декабря 2010

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

Веб-браузер обычно работает с протоколом HTTP.Итак, первый вопрос будет:

  • Кто отвечает за поддержку протокола HTTP?

Я думаю, что протокол HTTP должен быть реализован в веб-браузере, в то время как TCPПротоколы UDP, IP и т. Д. Должны быть реализованы в ОС.И именно поэтому протокол HTTP называется Протокол прикладного уровня .( Поправьте меня, если я ошибаюсь. )

Вернитесь к сценарию HTTP-коммуникации.

На стороне клиента :

Когда адрес вводится в веб-браузер, веб-браузер выберет правильный метод HTTP и создаст полный HTTP-запрос.Этот HTTP-запрос - не что иное, как чистый текст ASCII.Затем браузер выбирает частный номер порта и использует протокол TCP для отправки потока битов текста на сервер.Во время этого процесса выполняется DNS-запрос, если URL-адрес не является IP-адресом.

На стороне сервера :

Когда на сервер приходит какой-либо пакет TCP, онпроверяется, чтобы определить, нацелен ли он на порт 80.Если это так, он доставляется на серверный процесс, и теперь протокол TCP завершил свою работу, и пришло время запустить серверную программу.Серверная программа должна реализовать протокол HTTP, чтобы она могла анализировать HTTP-запрос клиентского браузера, извлеченный из пакета TCP.А затем верните необходимый HTML-файл обратно клиенту.Эти HTML-файлы могут быть статическими или динамически генерироваться с помощью таких технологий, как ASP.NET.

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

  • Независимо от того, в каком формате находится файл, мы можем закодировать их в виде строки Base64, таким образом, мы можем встроить их как часть веб-страницы.Мне интересно, можно ли закодировать файл jpeg в виде строки Base64 и встроить его в веб-страницу. ( Исправьте меня, если я ошибаюсь. )

  • Другой подход заключается не в том, чтобы встроить содержимое файла в веб-страницу, а в том, чтобы напрямую использовать TCP-соединения для его передачи.Этот подход не требует кодировки Base64 и должен иметь лучшую производительность.( Поправьте меня, если я ошибаюсь. )

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

Я надеюсь, чтоМодератор не воспримет этот вопрос как не по теме.

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 06 января 2011

Я видел, что некоторые вещи, которые я считаю, не на 100% верны ...

Затем браузер выбирает частный номер порта и использует протокол TCP для отправки потока битов текста на сервер.

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

Когда какой-либо TCP-пакет поступает на сервер, он проверяется на предмет назначения 80 портов. Если это так, он доставляется на серверный процесс, и теперь протокол TCP завершил свою работу, и пришло время запустить серверную программу.

Здесь я вижу две детали: во-первых, из текста кажется, что один TCP-пакет содержит все HTTP-сообщения, что может не соответствовать действительности (его можно разделить на множество TCP-пакетов по ряду причин, но главным образом потому, что пакеты иметь фиксированную максимальную длину, и сообщение может быть длиннее этой длины). Во-вторых, предполагается, что веб-сервер работает на порту 80, что обычно имеет место, но не всегда так, например, я считаю, что порт по умолчанию для веб-сервера Apache Tomcat - 8080, а в большинстве случаев порт веб-сервера. прослушивание может быть настроено (я не знаю ни одного веб-сервера, который на 100% закреплен за специальным портом).

Наконец, когда вы говорите

Когда адрес вводится в веб-браузере, веб-браузер выберет правильный метод HTTP и создаст полный HTTP-запрос.

Я думаю, что в этом конкретном случае (пользователь набрал адрес и нажал клавишу ввода) браузер всегда будет выбирать метод GET, так как POST используется при отправке информации на сервер.

Сначала HTTP довольно прост, но содержит много деталей, которые усложняют его. Я далеко не эксперт по этому вопросу, но, может быть, это поможет в дальнейшем :) http://www.faqs.org/rfcs/rfc2616.html

1 голос
/ 27 декабря 2010

TCP - транспортный протокол.Он описывает, как получить поток произвольных данных из одной сетевой точки в другую.Это то, что нужно делать практически каждому сетевому приложению, поэтому имеет смысл встроить это в ОС (не обязательно, но сейчас это стандартно для каждой популярной ОС).обмена данными между двумя машинами / приложениями не достаточно, хотя они должны договориться о том, как данные будут отформатированы (протокол).Существует много разных способов форматирования данных, и наилучший способ зависит от типа данных и типа приложения.

HTTP разработан специально как протокол запросов / ответов поверх TCP, но можетперебегать любой транспортный протокол.Вам не нужно отправлять данные base64 в HTTP, поскольку получателю не нужно проверять полезную нагрузку данных, чтобы найти, когда она заканчивается, полезная нагрузка может содержать что угодно.HTTP использует заголовок длины, чтобы сообщить получателю, сколько данных содержится в сообщении.

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

0 голосов
/ 06 января 2011

Исключительно в ответ на ваши вопросы, касающиеся загрузки / выгрузки файлов:

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

Для загрузки файла наиболее распространенным случаем является отправка формы;пользователь выбирает файл как часть формы.После нажатия кнопки отправки браузер отправляет сообщение POST на сервер.В качестве части процедуры POST назначается строка разделителя, и байты файла передаются между строкой разделителя, чтобы сервер мог ее распознать.

Существуют и другие параметры, но они наиболее распространены.

Нет встроенного в HTTP способа поддержки загрузки файла в виде строки base64.Файлы, включенные в веб-страницы, например изображения, запрашиваются отдельными запросами: каждый ресурс извлекается с помощью запроса GET.Однако было бы возможно проанализировать данные из включенной строки base64, используя javascript, и собрать их в ресурс.Это не будет сделано из-за сложного кода и обработки, которые должны были бы быть выполнены, но это возможно.

Что касается вашего анализа сетевого взаимодействия, мне он кажется довольно правильным.

...