Я всю свою карьеру занимался программированием локальных приложений (приложений C ++ и прочего). Однако сейчас я пытаюсь окунуться в мир Интернета. Я использую Eclipse (Mars) и Apache Tomcat 8.0.23, чтобы попытаться настроить среду, в которой я могу экспериментировать и изучать программирование на стороне сервера (JSP, PHP и т. Д.). У меня все настроено так, что когда я печатаю
localhost:8080
в моем браузере он направляет на правильную страницу tomcat. Я знаю, что это, наверное, очень просто, но здесь это просто взорвало меня.
Что именно происходит, когда я набираю localhost?
Откуда взялась страница tomcat, если не из Интернета? Я почти уверен, что данные поступают с сервера, который, благодаря Tomcat, находится на моем компьютере, но как мой браузер узнал, где найти информацию только с localhost: 8080?
Я предполагаю, что 8080 - это порт или что-то в этом роде, но я действительно не уверен в этом, и если это порт, я не совсем уверен, что это значит.
В основном все, что я знаю (я думаю ...) о веб-разработке на стороне сервера, это то, что в чистой веб-разработке html / css вся работа выполняется локально после того, как все загружено, но с серверами часть работы (внутри некоторых разделителей) уходит на сервер и возвращается обратно в HTML-код в другой форме (во многом как отправка данных в функцию в C ++ и возвращаемых других данных), которые затем снова отображаются на странице локально.
Вы заставляете свой веб-браузер запрашивать у вашей операционной системы разрешение имени хоста localhost
. Операционные системы обычно разрешают имя хоста localhost
к 127.0.0.1
, ваш интерфейс обратной петли.
Любое имя хоста или IP-адрес, за которым следует :
и номер порта, например :8080
сообщает браузеру подключиться к этому TCP-порту вместо порта 80 веб-сервера по умолчанию.
Как только http://localhost:80/
, http://localhost/
, http://127.0.0.1/:80
, и http://127.0.0.1/
каждый подключается к тому же серверу и порту, что и http://localhost:8080/
и http://127.0.0.1:8080/
также подключитесь к тому же IP-адресу, но через TCP-порт 8080
Дополнительное примечание: В HTTP / 1.1, несмотря на то, что веб-браузер подключается к одному и тому же IP-адресу и порту, ко многим веб-серверам существует небольшая разница между localhost и 127.0.0.1. В зависимости от того, что находится в адресной строке, ваш браузер отправит поле заголовка запроса с Host: localhost
или Host: 127.0.0.1
в этом. Когда веб-сервер настроен правильно, поле заголовка Host в браузере позволяет одному веб-серверу прослушивать один порт IP-адреса и обслуживать разные веб-страницы для многих разных доменов, которые разрешаются на один и тот же IP-адрес.
В системах Unix или таких ОС, как Linux или Freebsd, это файл / etc / hosts, и он, вероятно, будет содержать такие строки, как:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
В Windows файл c:\windows\system32\drivers\etc\hosts
и обычно будет похожая строка:
127.0.0.1 localhost
Дополнительное примечание: Если хотите, вы можете добавить строки в свой файл hosts, например:
127.0.0.1 localhost
127.0.0.1 developer.yourdomain.com
# Deny Browser Request For These Sites
127.0.0.2 www.spam.advertisements.com
127.0.0.2 super.ads.com
# Block These Sites
127.0.0.3 www.dont.go.here.com
127.0.0.3 nsfw.stuff.com
Единый указатель ресурсов (URL) http://developer.yourdomain.com:8080/
в адресной строке вашего браузера указывает браузеру установить TCP-соединение с портом 8080 вашего локального адреса обратной петли 127.0.0.1.
Кроме того, согласно rfc1700 стр. 4 любой адрес в диапазоне 127.0.0.0/8 также является адресом обратной связи. Таким образом, правильно настроенный веб-сервер, работающий на вашем компьютере, может отклонять все запросы на порт 127.0.0.2, выдавая при этом общее сообщение «Вы не должны сюда идти. Сайт заблокирован» для подключений на 127.0.0.3.
Apache Tomcat - это сервер, который прослушивает порт и запускает java-программы, которые генерируют контент для отправки в ваш браузер.
В этом сценарии вы отправляете запрос на разрешение localhost, который равен 127.0.0.1 (интерфейс обратной связи), и Apache настроен на прослушивание порта 8080, когда вы получаете доступ к localhost на порту 8080, он возвращает VirtualHost по умолчанию.
Когда вы вводите www.google.com в свой веб-браузер, он открывает соединение на порту 80 по умолчанию с сервером Google (через поиск DNS, чтобы узнать, какой IP-адрес www.google.com) и запрашивает веб-страницу. Сервер Google отвечает веб-страницей, которую ваш браузер рисует на экране (обычно путем дальнейших вызовов изображений, CSS и JavaScript).
Когда вы переходите на localhost: 8080, это то же самое. Имя сервера Localhost всегда соответствует машине, на которой вы работаете, и использует поддельный IP-адрес 127.0.0.1 (ваш компьютер будет иметь два IP-адреса - этот поддельный, который есть на каждом компьютере, и настоящий). Таким образом, у вас должен быть экземпляр Tomcat, работающий локально и прослушивающий соединения на порту 8080.
Почему порт 8080, а не порт http по умолчанию 80? Ну, это на случай, если у вас уже есть веб-сервер.
Обычно у вас есть веб-серверы и серверы приложений.
Веб-серверы (например, Apache httpd) обслуживают статические страницы. По сути, это похоже на модный односторонний FTP-сервер. Вы открываете TCP-соединение и запрашиваете файл с помощью HTTP-команд (обычно GET). Веб-сервер возвращает HTML-файл, и ваш браузер загружает и анализирует его, видит, что ему нужны другие изображения, и запрашивает их. Веб-сервер работает очень быстро, но в основном снимает файлы с локального диска и возвращает их.
Сервер приложений (например, Tomcat или JBoss) похож на него, за исключением того, что он обычно запускает код для «создания» запрашиваемой страницы, а не поднимает ее прямо с диска. Что он делает для создания этой страницы, зависит от вашего приложения. Он может подключаться к базе данных, запускать программу, случайным образом обслуживать страницу ... И т. Д. Когда вы, например, входите в свой онлайн-банкинг, сервер приложений устанавливает для вас сеанс, возвращает этот идентификатор сеанса в файле cookie, который вы браузер отправляет обратно каждый раз, когда вы делаете запрос, пока вы не выйдете из системы. Поэтому, если вы запрашиваете страницу «Мои балансы», тогда банк проверяет, кто вы, на основе идентификатора сеанса, затем переходит в свою базу данных, чтобы узнать ваше имя и баланс, а затем создает страницу со словами «Привет, Джон Смит, ваш баланс составляет 100 евро ". Серверы приложений обычно медленнее, но более универсальны, чем веб-серверы.
Во многих местах WebServer работает с портом по умолчанию 80, а затем AppServer работает на дополнительном порту (например, 8080). Таким образом, статические страницы обслуживаются быстро, и когда пользователи нажимают ссылку, которая переводит их на динамическую страницу, ссылка либо переходит на 8080 (на который отвечает сервер приложений), либо веб-сервер настраивается для пересылки определенных запросов на сервер приложений (в в этом случае он по-прежнему выглядит как порт по умолчанию 80 и поэтому выглядит немного лучше для пользователя).
Конечно, это обзор очень высокого уровня, и нет ничего такого черно-белого. Большинство веб-серверов могут создавать некоторый динамический контент, выполняя сценарии (обычно CGI через скрипты на Perl или PHP), и большинство серверов приложений также могут обслуживать простые файлы, такие как веб-сервер. Фактически можно просто запустить сервер приложений и изменить номер порта tomcat с 8080 на 80.
Наконец, многие приложения отказываются от обслуживания полных HTML-страниц для каждого запроса к серверу приложений (что считается медленным и неэффективным) и вместо этого отвечают только фрагментами данных, используя AJAX для отправки JSON или XML. Вернитесь к исходному www.google.com, который вы использовали для ввода поискового запроса, нажмите «Поиск» и получите страницу с результатами. Теперь вместо этого, когда вы вводите текст, ваш браузер постоянно отправляет запросы AJAX в Google, который отвечает актуальными результатами поиска на основе того, что вы набрали до сих пор, а затем ваш браузер обновляет страницу. Это означает, что не нужно ждать, пока пользователь отправит страницу быстрее и динамичнее для пользователя (как в классическом настольном приложении).
Проще говоря, localhost в качестве веб-адреса подключается к вашему локальному компьютеру, где в этом случае у вас установлен Apache как веб-сервер.
Вторая часть: 8080 означает подключение к порту 8080 этого веб-адреса. Если вы его не укажете, ваш веб-браузер подключится к порту веб-сервера по умолчанию, то есть к порту 80.
Если вы еще не пользуетесь IP-адресами, localhost - это фиксированная ссылка DNS на 127.0.0.1.
Должен доставить тебя туда ...