01-Feb-2018
23:46
- last edited on
21-Nov-2022
21:53
by
JimmyPackets
Hi DevCentral community!
I am currently trying to develop an iRule ILXPlugin, which checks a client HTTP request for certain properties. If some condiditions don't match I would like to send an HTTP response error message from the ILXPlugin to the client (without further forwarding to the backend). If everything is valid I want to forward it to the respective backend pool member.
Unfortunately, the ILXTransaction does not provide any real examples (other than the description) on how to use the methods respond and replaceBody to achieve this use case.
You can find my current code below, whereas I am trying to send a response with a custom html body and HTTP status code 404:
'use strict';
var f5 = require('f5-nodejs');
var plugin = new f5.ILXPlugin();
var options = new f5.ILXPluginOptions();
options.handleServerData = false;
options.handleServerResponse = false;
options.handleClientData = false;
options.handleClientOpen = true;
plugin.on('initialized', function () {
console.log('INITIALIZED');
});
plugin.on('connect', function(flow) {
var tmmID = flow.tmmId();
var clientSourceAddress = flow.client.remoteAddress;
flow.client.on('requestComplete', function(request) {
var destinationHost = request.params.headers.host;
var requestMethod = request.params.method;
// Example
if(requestMethod === 'POST') {
request.replaceBody();
request.respond();
// Send response with body: 'ERROR RESPONSE!' and Status Code '404'
flow.client.end();
}
var options = new f5.ILXLbOptions();
options.pool = '/Common/api_pool';
flow.lbSelect(options);
flow.client.allow();
request.complete();
});
flow.client.on('error', function(errorText) {
console.error('client error event: ' + errorText);
});
flow.server.on('error', function(errorText) {
console.error('server error event: ' + errorText);
});
flow.on('error', function(errorText) {
console.error('flow error event: ' + errorText);
});
});
plugin.start(options);
I would appreciate any suggestions.
Thank you in advance.
02-Feb-2018
12:03
- last edited on
02-Jun-2023
10:00
by
JimmyPackets
Maybe you can use the example on page 49 of this document:
https://devcentral.f5.com/DesktopModules/Downloads/API/downloadservice/DownloadFile/242?version=340
flow.client.on("data", function(buffer) {
flow.client.end(
"HTTP/1.0 200 OK\r\n" +
"Server: BigIP\r\n" +
"Connection: Keep-Alive\r\n" +
"Content-Length: " + 4 + "\r\n\r\n" +
"abc\n");
});
Or you need to use flow.client.write(data);
03-Feb-2018 09:01
Hi Niels!
Thanks a lot for your working example code.
Is there also an option to send a custom response (e.g. 404 Not Found) back to the client, instead of replying with 200 OK?
26-Jul-2023 03:44
+1
I have the same question.
Is there any feture request for that?