O redirecionamento é normalmente efetuado através dos códigos de status de resposta HTTP 301 (movido permanentemente) ou 302 (encontrado / movido temporariamente). Esses códigos de status de resposta HTTP 301 e 302 usados para realizar o redirecionamento estão incluídos nos cabeçalhos HTTP.
Só porque você não "viu nenhum redirecionamento no Firefox" não significa que o redirecionamento não estava acontecendo: foi, nos bastidores.
Existe outra maneira de redirecionar, usando JavaScript em uma página. Com o JavaScript, o redirecionamento pode ser óbvio para o usuário, onde ele pode ser mostrado primeiro e depois redirecionado (talvez após o atraso) para o outro local. Mas, esses não são redirecionamentos HTTP que viajam em virtude dos códigos de status de resposta do cabeçalho HTTP.
Para resolver sua dúvida sobre o Ruby: você deve fazer essa pergunta no Stack Overflow. Mas, em poucas palavras, sim, você deve ser capaz de definir os códigos de resposta de redirecionamento 301 e 302 com qualquer tecnologia da Web do lado do servidor.
UPDATE: Para responder à questão seguinte no seu comentário abaixo:
Se você quiser saber mais sobre como o HTTP funciona , recomendamos o seguinte livro: HTTP: O Guia Definitivo de David Gourley & Brian Totty . Você também pode consultar o padrão HTTP oficial, conforme definido por RFC 2616: Protocolo de transferência de hipertexto - HTTP / 1.1 .
Quanto ao motivo pelo qual a série de solicitações acima na sua pergunta leva 11 etapas , você precisa perguntar aos autores originais do software em questão. Provavelmente poderia ter sido implementado com menos etapas, mas provavelmente não apenas 1 passo. Considere, pelo menos, um dos redirecionamentos é necessário pelo servidor para definir um cookie no navegador do usuário antes de enviá-los para o recurso protegido.
Como você está tentando replicar um mecanismo de autenticação personalizado baseado em cookie, também sugiro que você concentre seus estudos em como esses sistemas são normalmente criados.
Se você estiver tentando fazer o script de uma página de login, verifique se o seu programa POSTs para o servidor corresponde a uma solicitação real em todos os aspectos, incluindo o parâmetro que você não está incluindo no momento.
Além disso, você precisa ter certeza de que seu código está aceitando e enviando de volta quaisquer cookies enviados pelo servidor. Não preservar os cookies enviados pelo servidor é um problema comum. erro com este tipo de exercício. Além disso, você precisa instruir qualquer biblioteca que estiver usando para comunicações HTTP para seguir os redirecionamentos. Algumas delas não seguem redirecionamentos por padrão.
E, finalmente, para depurar, capture os cabeçalhos e o corpo de solicitação e resposta, na página da Web e no programa e compare-os . Suspeite de quaisquer diferenças.