是否可以通过 Content-Type 将请求路由到不同的应用程序?

Ada*_*sek 4 linux nginx http-headers apache-2.2

我正在设计一个 JSON API,我想使用某种内容协商来对 API 进行版本控制。我目前正计划使用供应商 MIME 类型来执行此操作。

虽然我绝对可以在应用程序级别执行此操作,但我认为最好在 HTTP 服务器级别执行此操作。这可能与 Apache 或 nginx 一起使用吗?

Content-Type 看起来像:application/vnd.vendorname-v1+json 或者可能使用参数:application/vnd.vendorname+json;v=1

Ale*_*rov 6

Nginx 解决此类问题的惯用方法是通过map. 请参阅我在 StackOverflow 上的回答

基本上,您定义一个mapinhttp部分

map $any_variable $my_upstream {
  # Default value:
  default upstream1;

  # Exact match:
  application/vnd.vendorname+json;v=1 upstream2;

  # Regexp:
  ~^application.*vnd.vendorname-v1\+json upstream3;
}
Run Code Online (Sandbox Code Playgroud)

您可以在一张地图中混合精确匹配和正则表达式。

然后您只需$my_upstream在您serverlocation部分中使用:

location / {
  proxy_pass http://$my_upstream$uri;
}
Run Code Online (Sandbox Code Playgroud)

Nginx 懒惰地评估地图变量,仅在您使用它们时(每个请求)一次。