É aleatório e imprevisível, e se você se importa, está fazendo algo terrivelmente errado.
Because the server uses a naive implementation of HTTP, it only inspects the first packet of an HTTP request, and misses the arguments sent in the second packet. This causes the request to fail.
Eu não consigo descobrir o que você está tentando dizer lá. Se estiver realmente olhando para os pacotes, é uma implementação do TCP, não HTTP (já que os pacotes são pacotes de acordo com a especificação TCP). Uma implementação HTTP sensata nunca estaria olhando para os pacotes.
Se você realmente quer dizer que o servidor HTTP examina os pacotes, então ele precisa reconstruir o fluxo de dados TCP e seguir o protocolo HTTP. O final de uma solicitação HTTP é marcado com dois < CRLF > s no fluxo de bytes TCP. Qualquer outro método de detecção do final de uma solicitação HTTP está quebrado.
Como o primeiro pacote não contém uma sequência de fim de solicitação HTTP, ele claramente não pode conter toda a solicitação.
Um servidor HTTP deve seguir a especificação HTTP ou não é um servidor HTTP. A especificação HTTP apenas especifica quais bytes vão no fluxo de dados TCP. Não diz nada sobre segmentação, o que é bom porque, na prática, as aplicações não teriam como controlar isso. Ele especifica como o final de uma solicitação é identificado e o código que não obedece a essa especificação é não um servidor HTTP. Ele implementa um protocolo semelhante a HTTP que pode ou não ser compatível com HTTP.