当我在网络浏览器中转到localhost:8080时,到底发生了什么?(Apache Tomcat)


11

我的职业生涯是从事所有本地应用程序编程(C ++应用程序和其他功能)。但是,我现在正在尝试深入网络世界。我正在使用Eclipse(火星)和Apache Tomcat 8.0.23来尝试建立一个环境,在其中可以进行实验并了解服务器端编程(JSP,PHP等)。我已经设置好所有内容,以便在键入时

localhost:8080

在我的浏览器中,它定向到正确的tomcat页面。我知道这可能很简单,但是在这里让我有些惊讶。

当我输入localhost时到底发生了什么?

如果没有互联网,tomcat页面来自哪里?我非常确定数据来自服务器,这要归功于Tomcat,这要归功于Tomcat,但是我的浏览器如何知道仅从localhost:8080在哪里可以找到信息?

我假设8080是端口或其他端口,但我也不确定,如果它是端口,我也不确定该表示什么。

基本上,关于服务器端Web开发的所有知识(我认为...)是,在纯html / css Web开发中,一旦下载了所有内容,所有工作都在本地完成,但是对于服务器,某些工作(在某些定界符之内)服务器,然后以不同的形式(类似于将数据发送到C ++中的函数并返回不同的数据)注入html中,然后再次将其绘制到本地页面中。


2
我想邀请您阅读RFC 7230
迈克尔·汉普顿

看来这是一个漫长的夜晚;)
softeng 2015年

Answers:


9

当我将Web浏览器定向到localhost:8080时,到底发生了什么?

  1. 您正在使Web浏览器要求操作系统解析主机名localhost。操作系统通常将主机名解析localhost127.0.0.1,你的环回接口。

  2. 任何主机名或IP地址,后跟a :和端口号,例如,:8080告诉浏览器连接到该TCP端口而不是默认的Web服务器端口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中,即使Web浏览器连接到相同的IP地址和端口,也连接到许多Web服务器,但是localhost和127.0.0.1之间还是存在细微差别。根据地址栏中的内容,您的浏览器将发送带有Host: localhost或的请求标头字段Host: 127.0.0.1。正确配置Web服务器后,浏览器的Host标头字段允许单个Web服务器在单个IP地址端口上侦听,并为解析为同一IP地址的许多不同域提供不同的网页。

操作系统通常如何解析主机名(如localhost)?

  1. 在Unix系统或Unix之类的操作系统(例如Linux或Freebsd)上,该文件为/ etc / hosts,并且可能包含以下行:

    127.0.0.1   localhost
    ::1     localhost ip6-localhost ip6-loopback
    
  2. 在Windows上,该文件c:\windows\system32\drivers\etc\hosts通常是并且通常会有类似的行:

    127.0.0.1   localhost
    

附加说明:如果愿意,可以将以下行添加到主机文件中:

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 
  • http://developer.yourdomain.com:8080/浏览器地址栏中的统一资源定位符(URL) 指示Web浏览器与本地环回地址127.0.0.1的端口8080建立TCP连接。

  • 此外,根据rfc1700第4页,127.0.0.0/8范围内的任何地址也是回送地址。因此,在计算机上运行的正确配置的网络服务器可能会拒绝端口127.0.0.2上的所有请求,同时为127.0.0.3上的连接提供通用的“您不应进入此处。该站点被阻止”消息。

Tomcat页面来自哪里?

Apache Tomcat是一台侦听端口并运行Java程序的服务器,该程序会生成内容以发送到您的浏览器。


什么也没解释。非常肤浅
Green

@Green您到底在找什么?涵盖了解析为地址的本地主机名和TCP端口号。我没有讲:各种服务器如何处理端口列表,服务器池如何处理多个连接,如何配置Web服务器,TCP通信的内部工作原理,完整的HTTP标头说明,或名称解析如何为主机中未找到的域工作文件,每个文件都将超出问题的范围。
基思·雷诺兹

1

当您在网络浏览器中输入www.google.com时,它将在默认端口80上打开与Google服务器的连接(通过DNS查找以查看www.google.com的IP地址)并请求该网页。Google服务器以一个网页作为响应,您的浏览器在网页上绘制该网页(通常是通过进一步调用图像,CSS和JavaScript)。

当您转到localhost:8080时,情况完全相同。Localhost服务器名称始终会解析为您正在运行的计算机,并使用127.0.0.1的伪IP地址(您的计算机将有两个IP地址-每台计算机都有一个IP地址,而真实的是一个)。因此,您必须在本地运行一个Tomcat实例,以侦听端口8080上的连接。

为什么使用端口8080而不是默认的http端口80?好吧,以防万一您已经有一个网络服务器。

通常,您有Web服务器和应用程序服务器。

  1. Web服务器(例如Apache httpd)提供静态页面。实际上,它就像一台精美的单向FTP服务器。您打开一个TCP连接,并使用HTTP命令(通常是GET)请求一个文件。网络服务器返回一个HTML文件,然后您的浏览器将其下载并解析,查看是否需要其他图像并请求这些图像。Web服务器的速度非常快,但基本上是从本地磁盘中取出文件并返回文件。

  2. 应用服务器(例如Tomcat或JBoss)与之类似,只是它通常运行代码以“创建”您要的页面,而不是直接从磁盘上将其提起。创建该页面的作用取决于您的应用程序。它可以连接到数据库,运行程序,随机提供页面...等等。例如,当您登录在线银行时,应用服务器会为您设置一个会话,并在Cookie中返回该会话ID,每次您发出请求时,浏览器都会重新发送,直到您注销。因此,如果您要求“我的余额”页面,那么银行将根据您的会话ID查找您的身份,然后转到其数据库以获取您的姓名和银行余额,然后创建一个页面,内容为“嗨约翰·史密斯,您的余额是100欧元。” 与Web服务器相比,应用服务器通常速度较慢,但​​用途更多。

许多地方的WebServer在默认端口80上运行,然后AppServer在辅助端口(例如8080)上运行。因此,可以快速提供静态页面,并且当用户单击将其带到动态页面的链接时,该链接将转到8080(应用服务器会对其进行响应),或者将Web服务器设置为将某些请求转发到应用服务器(在在这种情况下,它仍然看起来像默认端口80,因此对用户来说更好一些。

当然,这是一个非常高级的概述,没有什么是黑白的。大多数Web服务器可以通过运行脚本(通常是通过使用Perl或PHP的脚本通过CGI)创建一些动态内容,并且大多数应用服务器还可以像Web服务器一样提供纯文件。实际上,可以仅运行应用程序服务器并将Tomcat端口号从8080更改为80。

最终,许多应用程序不再为每个请求提供完整的HTML页面(这是缓慢而低效的),而是使用AJAX发送JSON或XML的数据片段来响应。返回您用来输入搜索查询的原始www.google.com,点击“搜索”并获得结果页面。现在,当您键入内容时,浏览器会不断向Google发送AJAX请求,然后Google会根据您到目前为止输入的内容响应最新的搜索结果,然后您的浏览器会更新页面。这意味着无需等待用户提交页面,就可以更快,更动态地向用户提交页面(就像老式学校桌面应用程序一样)。


1

在这种情况下,您发送一个解析localhost为127.0.0.1(回送接口)的请求,并且Apache配置为在端口8080上侦听,当您在端口8080上访问localhost时,它将返回默认的VirtualHost。


0

简单来说,本地主机作为Web地址连接到本地计算机,在这种情况下,您将Apache安装为Web服务器。

第二部分:8080表示连接到该网址的端口8080。如果未指定,则Web浏览器将连接到默认的Web服务器端口,即端口80。

如果您尚未使用IP地址,则localhost是指向127.0.0.1的固定DNS链接。

应该带你去...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.