2016-02-12 82 views
0

我正在使用带有Java运行时的Google App Engine。我不太清楚Google执行的路由策略。在我的情况下,网络搜索只会产生误导和不和谐的结果。 根据Google文档:为什么GAE中的URL重写不被鼓励?

App Engine运行应用程序的多个实例,每个实例都有自己的Web服务器来处理请求。任何请求都可以路由到任何实例,因此来自同一用户的连续请求不一定会发送到同一实例。随着流量变化,实例的数量可以自动调整。

这很清楚。它让我认为我在我的开发服务器中定义的URL重写将在此更高级别的路由之后应用,这意味着请求实际上到达了许多潜在可用的应用服务器实例之一。然而,后来我偶然发现了一个thread,其中有人认为使用Tuckey的URL Rewrite插件进行URL重写很麻烦,因为它为所谓的静态文件切断了Google的内容传送网络。

所以我的问题是: - 鉴于请求到达路由后服务器,重写URL的问题是什么?服务器级别重写不应该对顶级Google路由产生任何影响。谷歌表示,静态文件存储在与真实应用无关的不同服务器上,所以你基本上不知道它们在那里。这是否意味着如果对这些静态文件中的一个有请求,实际的资源将被请求到其中一个保留的服务器,并且只有其他请求(包括来自pushstate的缺失资源和无效URL)实际到达我应用的服务器实例?

这一切都是真实的,在服务器实例级别重写URL时,我不会看到任何实际的性能风险。

+1

您也可以参考这个线索,高亮显示您可能想要避免的重新编写的唯一区域,这是针对静态资源的。映射各种需要解析应用程序代码的url是没有问题的。所以它引用静态图像/ js/css –

+0

但是html页面也是静态资源。我的用例是管理pushstate请求,它的URL本身是无效的。假如我上面说的是真的,我会断定CDN只针对像pushstate请求这样的无效URL而被删除,但是像你这样的其他东西应该不会受到影响。 –

+0

不知道你想做什么。我认为你需要真正解释它试图达到的目标。一个html页面可以是静态或动态生成的。在appengine中,您通常会使用静态处理程序来处理静态html页面,但这意味着无需部署新版本就无法更新它。如果你想通过一个URL处理程序来服务静态页面,那就这样做吧,这意味着你需要消耗更多的资源来提供资源。我使用数据存储的图像来做到这一点,或者我可以通过静态资源部署来管理它们。 –

回答

0

做服务器端重写没有任何问题。

Google使用谷歌前端(这是一个低延迟,边缘缓存的cdn)提供静态文件(在appengine-web.xml中配置),因此您应该始终希望为您提供静态内容,而不是生成或从你的战争中获得服务。它更快,更便宜,并没有实例缩放的缺点(即用户在等待旋转)

在你的情况下(一个index.html for angular),你不需要重写,你可以映射对所有路径使用相同的servlet /资源,例如/ *

当可能的web.xml路径规则不够灵活,无法将路由映射到servlet时,重写将发挥作用。但如果需要,使用它也没有问题。

+0

您是否可以确认请求是否仅路由到应用服务器,以防它们与可由CDN提供服务的静态资源不匹配? –

+0

这是正确的。你可以在客户端检查服务器 - 它在头文件中指定 – Nick

+0

'在你的情况下(一个index.html for angular),你不需要重写,你可以将相同的servlet /资源映射到所有的路径。/*'我希望看到一个在live appengine上做这个工作示例的配置。将任何路径映射到静态资源(如index.html)。 – konqi

相关问题