HTTP request handling and 409 responses

IBM Traveler handles HTTP requests in specific ways that may result in 409 responses.

All communication between the IBM Traveler server and its devices is handled over HTTP. When an HTTP request is made to Domino, HTTP passes it to the IBM Traveler servlet, which runs as part of the Domino HTTP task. The servlet is primarily a pass through to the IBM Traveler task over a local socket. This means the request is passed to IBM Traveler and then the servlet waits for the response to pass back to the device as an HTTP response.

Network operations between the device and Domino HTTP are seen at the Domino HTTP level, but they are not passed to the servlets that run in the Domino HTTP web container. Therefore, the IBM Traveler servlet is not aware if the device loses connectivity or purposefully closes the HTTP request prior to receiving a response.

HTTP has many defined response codes. 200 is OK. 409 is a Conflict. There are other response codes, but these two are the main focus here.

Most devices are known to only keep one HTTP request open with the server at a time. If the device needs to make a new request, it will close the previous request and open the new one. If the devices lose connectivity, the previous request will automatically be closed and the device will open a new request when connectivity is restored. When these requests are closed (for whatever reason), Domino HTTP is aware of the closure, but the IBM Traveler servlet is not. As a result, the request will remain open and hold system resources, including the HTTP thread. To release these resources, IBM Traveler has logic to close previous requests if a new request is received and the device is known (from prior knowledge) to have closed those previous requests. To close the request, the IBM Traveler servlet has to respond with something back to Domino HTTP, which then will try to deliver that response; that response should ultimately fail to be delivered as the request has been closed, but it will get logged along the way. The HTTP code that IBM Traveler is using in this case is 409, based on the logic that this new request conflicts with the old one. Therefore, you may see many HTTP 409 responses in the logs (IBM Traveler and HTTP). While these are not 200 (OK) responses, they do not indicate a problem, and represent the way HTTP resources are managed under these circumstances.

If there are proxies or firewalls involved in the system, they may have their own requests still open and get the 409 responses as well. However, the device ultimately should not receive them, as the request has been abandoned at least at one point in the path between the device and the server.