dispatch.yaml

时间:2016-10-28 20:02:33

标签: google-app-engine app-engine-flexible

我正在查看有关dispatch.yaml的各个页面,其中大部分都包含类似的信息和示例:

https://cloud.google.com/appengine/docs/flexible/nodejs/how-requests-are-routed#routing_with_a_dispatch_file https://cloud.google.com/appengine/docs/python/config/dispatchref https://cloud.google.com/appengine/docs/go/config/dispatchref

我碰巧在GAE Flexible Environment上使用node.js,但我认为对于每种语言和环境都是一样的。

问题是这些页面并没有真正指定dispatch.yaml的工作原理。特别是:

  1. 是否按规定应用规则?我假设第一个匹配规则是使用的规则,但似乎没有任何说法。
  2. 前导的glob(通配符)字符只与域名匹配,还是可以匹配URL路径的第一部分?如果规则为*/hello,那么匹配myapp.appspot.com/path/hello吗?根据文档中的一些模糊提示,我猜不到,但它并不是很清楚。
  3. 如果dispatch.yaml中的规则与URL不匹配,是否会将其路由到默认服务?我认为必须这样做,但这些页面再说一遍。
  4. 在将网址发送到服务之前,是否会根据规则重写网址?如果规则为*/path/*且网址为https://myapp.appspot.com/path/hello,服务会将其视为/path/hello还是/hello?我猜这个前者。
  5. 我现在正在做一些试验和错误,所以我很快就能回答我自己的问题。我也是通过他们的文档反馈系统将此内容提交给Google。

2 个答案:

答案 0 :(得分:3)

到目前为止我所知道的事情:

  1. 是的,规则是按顺序尝试的。例如,如果您希望一个URL转到特定服务,而所有其他URL转到另一个服务,则应首先指定特定的URL: ``` 调度:

    • 网址:" * /具体" 模块:具体

    • 网址:" / " 模块:一般 ``` 如果您以相反的顺序放置这些规则,则永远不会使用模块specific,因为通配符规则将捕获URL /specific

  2. 未知

  3. 是。您可以通过提出与任何dispatch.yaml规则不匹配的请求并观看default的服务日志来对此进行测试。

  4. 不重写。如果规则为*/path/*且实际网址为https://myapp.appspot.com/path/hello,则您的服务仍应处理/path/hello,而不是/hello

答案 1 :(得分:0)

只需填写空白(随时将其粘贴到接受的答案中即可):

  1. 不。它只匹配路径的开始。

我使用以下资源创建了两个应用程序:

default -> /abc/def/test.html -> <h1>default</h1>
other -> /abc/def/test.html -> <h1>other</h1>

和1条路线:

<dispatch>
  <url>*/def/*</url>
  <module>other</module>
</dispatch>

当我按下{app engine}/abc/def/test.html时,我得到了“默认”