Tomcat和代理请求

问题描述:

我在浏览器中配置默认​​的tomcat安装(在“localhost”端口“8080”上运行)作为代理服务器,并尝试连接到http://www.google.comTomcat和代理请求

我希望有一条错误消息说tomcat没有配置为代理服务器,或者我应该得到谷歌网站的内容。

相反,我得到了我的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头进行的操作。

+0

我应该修改上述内容。我给出的示例头* *表示代理请求,因为URI包含主机。如果它是来自浏览器或反向代理的直接请求,它将以/开头。反向代理将不同地指定代理主机。所以,Tomcat肯定有可能确定这是一个将其视为代理的请求。无论出于何种原因,默认情况下Tomcat都会将其视为正常请求。所以,除非你真的知道你在做什么,否则不要将Tomcat设置为你的代理。 – sosiouxme 2012-04-16 16:52:13

所有代理服务器都会传递请求和响应。从浏览器的角度来看,您请求了一个URL,代理服务器返回了HTML并且代码为200,所以这被解释为来自请求的URL的响应。由于这是一个静态页面,而不是一个真正的代理服务器,所有请求都会导致相同的静态响应。

+0

如果我访问http://www.google.com/examples,我会看到我部署的tomcat的示例应用程序。这对我来说没有意义。 我同意浏览器只是忠实地显示内容。我的问题是与tomcat,它已被配置为代理服务器。 – Raghuram 2010-01-20 11:28:10

+0

你是如何将其配置为代理服务器的?根据您的设置,它可能只是某些Web应用程序的代理,或者可能在另一个端口上运行。 – davogones 2010-01-20 15:56:18

+0

我在tomcat中什么也没做。我在浏览器上将此Tomcat配置为代理服务器。这是为了检查当服务器收到它不能遵守的代理请求时的行为。 当我做以下 GET http://www.google.com/myapp HTTP/1.1 我想知道为什么tomcat应该忽略前导URL和处理请求作为/ myapp? – Raghuram 2010-01-21 02:53:17

Tomcat没有任何内置的代理功能。我不知道你在说什么配置。

浏览器将请求一个URI,如“http://google.com/examples”。如果Tomcat配置了默认主机和默认欢迎页面,则会显示它。它完全不理解代理请求。

您必须安装代理servlet并将其映射到根目录才能使用Tomcat作为代理服务器。