当我指示我的网络浏览器访问 localhost:8080 时究竟发生了什么?

当我指示我的网络浏览器访问 localhost:8080 时究竟发生了什么?

我的职业生涯都在从事所有本地应用程序编程(C++ 应用程序等等)。不过,我现在正试图涉足网络世界。我正在使用 Eclipse (Mars) 和 Apache Tomcat 8.0.23 尝试设置一个环境,在其中我可以试验和学习服务器端编程(JSP、PHP 等)。我已经设置好了一切,这样当我输入

localhost:8080

在我的浏览器中,它指向正确的 tomcat 页面。我知道这可能非常简单,但这让我很惊讶。

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

如果不是互联网,tomcat 页面来自哪里?我很确定数据来自服务器,这要感谢 Tomcat,它位于我的 PC 上,但我的浏览器如何知道从哪里找到信息,仅从 localhost:8080 开始?

我认为 8080 是一个端口或类似的,但我对此也不太确定,如果它是一个端口,我也不太确定它意味着什么。

基本上,我所知道的(我认为......)关于服务器端 Web 开发的一切就是,在纯 html/css Web 开发中,一旦所有内容都下载完毕,所有工作都在本地完成,但对于服务器,部分工作(在某些分隔符内)会转移到服务器并以不同的形式注入到 html 中(很像将数据发送到 C++ 中的函数并返回不同的数据),然后再次在本地绘制到页面上。

答案1

当我指示我的网络浏览器访问 localhost:8080 时究竟发生了什么?

  1. 您正在使 Web 浏览器要求操作系统解析主机名localhost。操作系统通常会将主机名解析localhost127.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 服务器来说,localhost 和 127.0.0.1 之间也存在细微差别。根据地址栏中的内容,浏览器将发送一个包含 或 的请求标头字段Host: localhostHost: 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
    

补充说明:如果愿意,您可以在 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/指示 Web 浏览器与本地环回地址 127.0.0.1 的端口 8080 建立 TCP 连接。

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

tomcat的页面从哪里来的?

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

答案2

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

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

为什么是端口 8080 而不是默认的 http 端口 80?那是因为你已经有了一个 web 服务器。

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

  1. Web 服务器(如 Apache httpd)提供静态页面。实际上,它就像一个花哨的单向 FTP 服务器。您打开 TCP 连接并使用 HTTP 命令(通常是 GET)请求文件。Web 服务器返回一个 HTML 文件,您的浏览器下载并解析它,发现它需要其他图像并请求这些图像。Web 服务器非常快,但基本上是从本地磁盘提取文件并返回它们。

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

许多地方的 Web 服务器都在默认端口 80 上运行,而 AppServer 则在辅助端口(如 8080)上运行。因此,静态页面的访问速度很快,当用户单击链接进入动态页面时,链接要么转到 8080(应用服务器会对此作出响应),要么设置 Web 服务器以将某些请求转发到应用服务器(在这种情况下,它仍然看起来像默认端口 80,因此对用户来说看起来更友好一些)。

当然,这只是一个非常高层次的概述,没有什么是那么黑白分明的。大多数 Web 服务器可以通过运行脚本(通常是通过使用 perl 或 PHP 的脚本的 CGI)来创建一些动态内容,大多数应用服务器也可以像 Web 服务器一样提供纯文件。事实上,只需运行应用服务器并将 tomcat 端口号从 8080 更改为 80 即可。

最后,许多应用程序不再为每个对应用服务器的请求提供完整的 HTML 页面(这被视为缓慢且低效),而是仅使用 AJAX 发送 JSON 或 XML 来响应数据片段。回到您用来输入搜索查询的原始 www.google.com,点击搜索并获得结果页面。现在,当您输入时,您的浏览器会不断向 Google 发送 AJAX 请求,Google 会根据您迄今为止输入的内容响应最新的搜索结果,然后您的浏览器会更新页面。这意味着无需等待用户提交页面,因此对用户来说速度更快、更具动态性(就像老式桌面应用程序一样)。

答案3

在这种情况下,您发送一个请求来解析本地主机 127.0.0.1(环回接口),并且 Apache 配置为监听端口 8080,当您访问端口 8080 上的本地主机时,它会返回默认的 VirtualHost。

答案4

简单来说,localhost 作为网址连接到您的本地机器,在这种情况下,您已安装 Apache 作为 Web 服务器。

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

如果您已经了解 IP 地址,localhost 是指向 127.0.0.1 的固定 DNS 链接。

应该带你去那里...

相关内容