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.xml
the 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>