The proxy-request action forwards the incoming request almost unmodified to an upstream system.
The HTTP method and the request body are taken as-is from the client request.
Cookie, Authorization and any hop-by-hop header fields like Connection
will be dropped automatically, the remaining header fields will be sent upstream.
The response body is written into fit://request/content/main where it
can be directly accessed with the body or the
content function.
Additional information about the response, such as headers and status code can
be found in the $upstream variable.
Just like an ordinary request the proxy-request
can be configured using a JSON template
with the following properties:
Sets the origin of the upstream system. Either origin or url is required. Type: string.
To be used in connection with origin. If true, strips the endpoint path from the client request URL path before it is added to the upstream origin. Type: boolean, default: false
E.g.
basePath: /api
paths:
/foo/bar:
/wildcard/**For the client request URL https://client.example.com/api/foo/bar, the path is stripped to /.
For the client request URL https://client.example.com/api/wildcard/path/to, the path is stripped to /path/to.
Inserts a path prefix before the given (client request URL) path, after possible endpoint stripping (see stripEndpoint). Type: string.
Sets the URL to the upstream system. Either url or origin is required.
Overrides the query part of the URL. See the request action for the query syntax.
Sets or removes request header fields. The syntax is the same as in the request action.
To remove a header, set its value to "".
Sets request options. See the request action options for valid options.
Note: that, with proxy-request, in contrast to request, the defaults for exit-on-error, validate-request and validate-response are true, if a definition is configured.
Using origin:
<flow>
<proxy-request>
{
"origin": "https://example.com",
"stripEndpoint": true,
"addPrefix": "/path/to/api",
"headers": {
"X-API-Key": "foo42bar"
},
"options": {
"definition": "upstream.yaml",
"validate-response": "report-only"
}
}
</proxy-request>
</flow>With the client request URL http://client.example.com/my/api/foo/bar matching the swagger definition path
basePath: /my/api
paths:
/foo/**:
x-flat-flow: proxy.xmlthe upstream request URL will be https://example.com/path/to/api/bar.
Using url:
<flow>
<proxy-request>
{
"url": "https://example.com/api/",
"headers": {
"X-API-Key": "foo42bar"
},
"options": {
"definition": "upstream.yaml",
"validate-response": "report-only"
}
}
</proxy-request>
</flow>