当我在我的networking浏览器中进入localhost:8080时究竟发生了什么? (Apache Tomcat)

我花了我的职业生涯做所有本地应用程序编程(C ++应用程序和whatnot)。 不过,我现在正努力把自己的脚深入networking世界。 我正在使用Eclipse(火星)和Apache Tomcat 8.0.23尝试build立一个我可以尝试和了解服务器端编程(JSP,PHP等)的环境。 当我input时,我已经设置了这一切

localhost:8080 

在我的浏览器中,它指向正确的tomcat页面。 我知道这可能很简单,但是这里有点让人心动。

当我键入本地主机时究竟发生了什么?

tomcat页面从哪里来,如果不是互联网? 我很确定数据来自服务器,这要感谢Tomcat,在我的电脑上,但是我的浏览器是如何知道从localhost:8080中find信息的呢?

我假设8080是一个端口或什么东西,但我真的不确定,如果它是一个端口,我不确定这意味着什么。

基本上所有我知道的(我认为…)关于服务器端网页开发的是,在纯HTML / CSS Web开发中,所有的工作都是在本地完成的,一切都下载完成,但有了服务器,一些工作(一些分隔符)服务器,并以不同的forms注入到html中(就像将数据发送到C ++中的函数以及返回不同的数据一样),然后再次在本地绘制页面。

当我将Web浏览器指向localhost:8080时究竟发生了什么?

  1. 您正在使您的Web浏览器要求您的操作系统parsing主机名localhost 。 操作系统通常会将主机名localhostparsing为127.0.0.1 ,即您的回环接口。

  2. 任何主机名或IP地址后跟一个:和一个端口号如:8080告诉浏览器连接到该TCP端口而不是默认的Web服务器端口80。

    正如http://localhost:80/http://localhost/ http://127.0.0.1/:80http://127.0.0.1/每个连接到相同的服务器和端口一样, http://localhost:8080/http://127.0.0.1:8080/也连接到相同的IP地址,但在TCP端口8080

附加说明:在HTTP / 1.1中,即使Web浏览器连接到相同的IP地址和端口,但对于许多Web服务器,本地主机和127.0.0.1之间也有细微差别。 根据地址栏中的内容,浏览器将发送一个请求标题字段,其中Host: localhostHost: 127.0.0.1 。 当Web服务器configuration正确时,浏览器的Host头域允许单个Web服务器侦听单个IP地址端口,并为parsing为相同IP地址的多个不同网域提供不同的网页。

操作系统通常如何parsinglocalhost这样的主机名?

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

  • 此外,根据127.0.0.0/8范围内的任何地址,也是一个环回地址。 因此,在您的计算机上运行的正确configuration的web服务器可能会拒绝127.0.0.2端口上的所有请求,同时在127.0.0.3上给出通用的“您不应该到这里。该站点已被阻止”的连接消息。

tomcat页面从哪里来?

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

在这种情况下,您发送一个请求来parsing127.0.0.1(回送接口)的本地主机,Apache被configuration为侦听端口8080,当您在端口8080上访问本地主机时,它返回默认的VirtualHost。

简单来说,localhost作为一个web地址连接到你的本地机器,在这种情况下,你将Apache安装为web服务器。

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

如果您仍然使用IP地址,localhost是一个到127.0.0.1的固定DNS链接。

应该让你在那里…

当您通过networking浏览器inputwww.google.com时,会在默认端口80上向Google服务器(通过DNS查询查看www.google.com的IP地址)打开连接并请求网页。 Google服务器会响应您的浏览器在屏幕上绘制的网页(通常会进一步调用图像,CSS和JavaScript)。

当你去localhost:8080这是完全一样的东西。 本地主机服务器名称始终parsing到您正在运行的计算机上,并使用假IP地址127.0.0.1(您的计算机将有两个IP地址 – 这是每个计算机具有的真实IP地址)。 所以你必须有一个Tomcat实例在本地运行,监听端口8080上的连接。

为什么端口8080而不是默认的http端口80? 那么,如果你已经有一个networking服务器。

通常你有Web服务器和应用服务器。

  1. Web服务器(如Apache httpd)提供静态页面。 实际上,它就像一个奇特的单向FTP服务器。 您打开一个TCP连接,并使用HTTP命令(通常为GET)请求一个文件。 networking服务器返回一个HTML文件,你的浏览器下载并parsing它,看到它需要其他图像并请求它们。 networking服务器非常快,但基本上将文件从本地磁盘上提取出来并返回。

  2. 一个应用服务器(像Tomcat或者JBoss)是相似的,除了它通常运行代码来“创build”你所要求的页面,而不是直接从磁盘上提取它。 它创build页面的function取决于您的应用程序。 它可以连接到一个数据库,运行一个程序,随机提供一个页面…等等。当你login到你的网上银行,例如,应用程序服务器为你设置一个会话,返回该会话ID在一个cookie中,你的浏览器每次发出请求都会重新发送,直到您退出。 因此,如果您要求“我的余额”页面,那么银行会根据您的会话ID查找您的姓名,然后访问其数据库以获取姓名和银行余额,然后创build一个页面,上面写着“Hi John Smith,您的余额是€100。“ 应用程序服务器通常比Web服务器更慢,但function更多。

许多地方都有一个运行默认端口80的WebServer,然后运行在辅助端口(如8080)上的AppServer。 所以静态页面的服务速度很快,当用户点击一个链接到一个dynamic页面,链接或者转到8080(应用服务器响应)或者设置web服务器将某些请求转发到应用服务器(在这种情况下它仍然看起来像默认的端口80,所以看起来更好一些)。

当然,这是一个非常高的水平概述,没有什么是黑色和白色。 大多数Web服务器可以通过运行脚本来创build一些dynamic内容(通常是使用Perl或PHP的脚本),大多数应用程序服务器也可以像web服务器一样提供普通文件。 实际上,可以运行一个应用程序服务器并将tomcat端口号从8080更改为80。

最后,许多应用程序正在从为每个请求提供完整的HTML页面转移到应用程序服务器(这看起来很慢并且效率低下),而只是使用AJAX发送JSON或XML来响应数据片段。 回到您用来inputsearch查询的原始www.google.com,点击search并获得结果页面。 现在,当您input时,浏览器不断地向Google发送AJAX请求,并根据您input的最新search结果进行响应,然后您的浏览器更新页面。 这意味着无需等待用户将页面提交得更快更dynamic(就像旧式的桌面应用程序一样)。