HTTP 요청 처리 및 409 응답

IBM Traveler는 409 응답이 발생할 수 있는 특정한 방법으로 HTTP 요청을 처리합니다.

IBM Traveler 서버 및 해당 디바이스 간의 모든 통신은 HTTP에서 처리됩니다. Domino에 HTTP 요청이 작성되면 HTTP는 이를 IBM Traveler 서블릿에 전달하고, 여기서 Domino HTTP 태스크의 일부로 실행됩니다. 서블릿은 주로 로컬 소켓을 통해 IBM Traveler 태스크로 전달됩니다. 이는 요청이 IBM Traveler로 전달된 다음, 서블릿은 응답이 HTTP 응답으로 다시 디바이스로 전달될 때까지 대기함을 의미합니다.

디바이스 및 Domino HTTP 간의 네트워크 작업은 Domino HTTP 레벨에서 표시되지만, Domino HTTP 웹 컨테이너에서 실행되는 서블릿에 전달되지 않습니다. 따라서 IBM Traveler 서블릿은 응답을 받기 전에 디바이스 연결이 끊어지거나 일부러 HTTP 요청을 닫은 경우를 알지 못합니다.

HTTP에는 정의된 많은 응답 코드가 있습니다. 200은 정상, 409는 충돌을 의미합니다. 다른 응답 코드도 있지만 여기서는 이 두 코드가 중심입니다.

대부분의 디바이스는 한 번에 하나의 HTTP 요청만 서버와 열 수 있는 것으로 알려져 있습니다. 디바이스가 새로운 요청을 해야 할 경우 이전 요청을 닫고 새 요청을 엽니다. 디바이스 연결이 끊어지면 이전 요청이 자동으로 닫히고, 연결이 복원되면 디바이스가 새 요청을 엽니다. 어떤 이유로든 이 요청이 닫히면 Domino HTTP는 닫힌 사실을 인식하지만 IBM Traveler 서블릿은 인식하지 못합니다. 따라서 요청은 계속 열려 있고 HTTP 스레드를 포함한 시스템 자원을 보류합니다. 이 자원을 해제하기 위해 IBM Traveler에는 새 요청을 수신되고 디바이스가 해당하는 이전 요청을 닫은 것으로 알려진 경우 이전 요청을 닫을 수 있는 로직이 있습니다. 요청을 닫으려면 IBM Traveler 서블릿이 Domino HTTP에 다시 응답해야 합니다. 그러면 Domino HTTP가 해당 응답의 전달을 시도합니다. 결국 요청이 닫혔기 때문에 해당 응답은 전달되지 않지만 계속 로깅됩니다. IBM Traveler가 이 케이스에서 사용하고 있는 HTTP 코드는 409입니다. 이는 새 요청이 이전 요청과 충돌한다는 로직을 기반으로 합니다. 따라서 로그에 많은 HTTP 409 응답이 표시될 수 있습니다(IBM Traveler 및 HTTP). 200(정상) 응답은 없지만 문제점을 나타내지 않고, HTTP 자원이 이 상황에서 관리되는 방식을 나타냅니다.

시스템에 프록시 또는 방화벽이 관련된 경우 열려있는 동안에는 자체 요청을 가질 수 있고, 따라서 409 응답을 받을 수 있습니다. 그러나 디바이스와 서버 간 경로의 한 지점 이상에서 요청이 중단되었기 때문에 디바이스가 결국 요청을 수신하지 않습니다.