【发布时间】:2010-01-20 06:41:02
【问题描述】:
我在浏览器中配置了一个默认的 tomcat 安装(在端口“8080”的“localhost”上运行)作为代理服务器,并尝试连接到http://www.google.com。
我希望得到一条错误消息,说明 tomcat 未配置为代理服务器,或者我应该获取 google 网站的内容。
相反,我得到了我的 tomcat 安装的 index.html 页面。
出了什么问题?
【问题讨论】:
我在浏览器中配置了一个默认的 tomcat 安装(在端口“8080”的“localhost”上运行)作为代理服务器,并尝试连接到http://www.google.com。
我希望得到一条错误消息,说明 tomcat 未配置为代理服务器,或者我应该获取 google 网站的内容。
相反,我得到了我的 tomcat 安装的 index.html 页面。
出了什么问题?
【问题讨论】:
Tomcat 不知道它应该代理请求。它只知道你的浏览器出现并要求它提供一些东西,如下所示:
GET http://www.google.com/example HTTP/1.1
[plus other headers]
使用 Apache HTTPD,您可能具有这样的配置:当请求出现在不是其自身的主机时,它充当请求的代理。
Tomcat 通常不用作代理。然而,Tomcat 经常在反向代理后面使用,其中请求可能针对“www.google.com”之类的内容,该请求可能会被转发回 Tomcat 作为它应该服务的站点。 Tomcat 的标准配置几乎接受指定为自己的主机,并采用它来创建对自身的绝对引用,并假设如果请求到达它,它是合法的。您当然可以通过配置更改此行为,但如果您不这样做,Tomcat 将尝试从其应用程序集中提供您所请求的内容,假设您知道您在使用 Host 标头做什么。
【讨论】:
代理服务器所做的只是传递请求和响应。从浏览器的角度来看,您请求了一个 URL,代理服务器返回 HTML 和一个代码 200,因此这被解释为来自所请求 URL 的响应。由于这是一个静态页面,而不是真正的代理服务器,所有请求都会产生相同的静态响应。
【讨论】:
Tomcat 没有任何内置的代理功能。不知道你说的是什么配置。
浏览器将请求像“http://google.com/examples”这样的 URI。如果 Tomcat 配置了默认主机和默认欢迎页面,则会显示该页面。它根本不理解代理请求。
您必须安装代理 servlet 并将其映射到根目录才能使用 Tomcat 作为代理服务器。
【讨论】: