3

My application consists of a 'gateway' DataSnap REST server that is the first point of access for all clients. Depending on the username the clients pass in their requests (basic authentication), the request needs to be redirected to another DataSnap server. My question - is there anyway of building the 'gateway' server so that it simply redirects whatever the request is to another server based on the username, or other values in the HTTP request headers? I'm trying to avoid having to repeat all the server methods in the 'gateway' service i.e. I'd rather not 'chain' 2 requests together but somehow just have 1 request redirected.

Not sure if this is possible, but thought somebody might prove me wrong? I'm using Delphi XE2 and the DataSnap servers are Windows services.

4

2 回答 2

2

我可以在这里看到两个选项:

  • 仅使用第一台服务器登录后返回真实服务器的地址

或者

  • 在 Datasnap 服务器和基于身份验证数据的 RewriteRules 前面使用 Apache 或 NGINX 反向代理(但是我今天的 Google-Fu 似乎已经用尽了,也许这可以作为 HTTP / Apache 特定问题放在 SO 上)
于 2013-06-16T19:48:47.993 回答
0

简短版本:解决方案将取决于您知道将请求定位到哪个级别(HTTP、DataSnap 等)。

如果您可以在 DataSnap 级别上做出决定,则有两种解决方案:

  • 纯粹的方法是编写一个通用的 DataSnap 网关,它可以询问 datasnap 目标服务器,为其动态创建代理服务器和客户端,然后拦截流量并决定将请求移交给哪个 datasnap 目标服务器。
  • 一种更务实的方法是您害怕的方法。

另一种方法是在 HTTP 级别上。仅当您可以在 HTTP 级别确定应将请求移交给哪个目标服务器时,这才有效。

于 2013-06-16T17:59:50.313 回答