【问题标题】:Tomcat and proxy requestTomcat 和代理请求
【发布时间】:2010-01-20 06:41:02
【问题描述】:

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

我希望得到一条错误消息,说明 tomcat 未配置为代理服务器,或者我应该获取 google 网站的内容。

相反,我得到了我的 tomcat 安装的 index.html 页面。

出了什么问题?

【问题讨论】:

    标签: tomcat proxy


    【解决方案1】:

    Tomcat 不知道它应该代理请求。它只知道你的浏览器出现并要求它提供一些东西,如下所示:

    GET http://www.google.com/example HTTP/1.1
    [plus other headers]
    

    使用 Apache HTTPD,您可能具有这样的配置:当请求出现在不是其自身的主机时,它充当请求的代理。

    Tomcat 通常不用作代理。然而,Tomcat 经常在反向代理后面使用,其中请求可能针对“www.google.com”之类的内容,该请求可能会被转发回 Tomcat 作为它应该服务的站点。 Tomcat 的标准配置几乎接受指定为自己的主机,并采用它来创建对自身的绝对引用,并假设如果请求到达它,它是合法的。您当然可以通过配置更改此行为,但如果您不这样做,Tomcat 将尝试从其应用程序集中提供您所请求的内容,假设您知道您在使用 Host 标头做什么。

    【讨论】:

    • 我应该修改以上内容。我给出的示例标头 does 表示代理请求,因为 URI 包括主机。如果它是来自浏览器或反向代理的直接请求,它将以 / 开头。反向代理会以不同的方式指定代理主机。因此,Tomcat 肯定有可能确定这是一个将其视为代理的请求。无论出于何种原因,Tomcat 默认只将其视为正常请求。所以,除非你真的知道自己在做什么,否则不要将 Tomcat 设置为你的代理。
    【解决方案2】:

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

    【讨论】:

    • 如果我访问google.com/examples,我会看到我部署的tomcat 的示例应用程序。这对我来说毫无意义。我同意浏览器只是忠实地显示内容。我的问题是tomcat,它已被配置为代理服务器。
    • 您是如何将其配置为代理服务器的?根据您的设置方式,它可能只是某些 Web 应用程序的代理,也可能在另一个端口上运行。
    • 我在tomcat中什么也没做。我正在将此 Tomcat 配置为浏览器上的代理服务器。这是为了检查当服务器接收到它无法接受的代理请求时应该是什么行为。当我执行以下 GET google.com/myapp HTTP/1.1 时,我想知道为什么 tomcat 应该忽略前导 URL 并将请求作为 /myapp 处理?
    • 我明白了……你说得对,这很奇怪。通常,服务器应该拒绝该请求,但由于某种原因,Tomcat 正在处理它并返回默认页面。好吧,至少我现在明白你的问题了!
    • 好吧,我设置了一个vanilla tomcat并将其配置为我的浏览器的代理,我得到了和你一样的结果。下一步是找出它为什么这样做!
    【解决方案3】:

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

    浏览器将请求像“http://google.com/examples”这样的 URI。如果 Tomcat 配置了默认主机和默认欢迎页面,则会显示该页面。它根本不理解代理请求。

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

    【讨论】:

      猜你喜欢
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 2010-10-08
      • 2012-06-06
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      相关资源
      最近更新 更多