Sesiones HTTP

  1. Una sesión HTTP es una secuencia de transacciones de red de peticiones y respuestas

  2. Un cliente HTTP inicia una petición estableciendo una conexión TCP con un puerto particular de un servidor (normalmente el puerto 80)
  3. Un servidor que esté escuchando en ese puerto espera por un mensaje de petición de un cliente.
  4. El servidor retorna la línea de estatus, por ejemplo HTTP/1.1 200 OK, y su propio mensaje. El cuerpo de este mensaje suele ser el recurso solicitado, aunque puede que se trate de un mensaje de error u otro tipo de información.

Veamos un ejemplo. Usemos este servidor:

[~/local/src/ruby/sinatra/rack/rack-debugging]$ cat hello1.rb 
require 'rack'

class HelloWorld
  def call env
    [200, {"Content-Type" => "text/plain"}, ["Hello world"]]
  end
end

Rack::Handler::WEBrick::run HelloWorld.new

[~/local/src/ruby/sinatra/rack/rack-debugging]$ ruby hello1.rb 
[2013-09-23 15:16:58] INFO  WEBrick 1.3.1
[2013-09-23 15:16:58] INFO  ruby 1.9.3 (2013-02-22) [x86_64-darwin11.4.2]
[2013-09-23 15:16:58] INFO  WEBrick::HTTPServer#start: pid=12113 port=8080

Arrancamos un cliente con telnet con la salida redirigida:

[~/local/src/ruby/sinatra/rack/rack-debugging]$ telnet localhost 8080 > salida

Escribimos esto en la entrada estandard:

GET /index.html HTTP/1.1
Host: localhost
Connection: close
con una línea en blanco al final. Este texto es enviado al servidor.

El cliente deja su salida en el fichero salida:

[~/local/src/ruby/sinatra/rack/rack-debugging]$ cat salida
Trying ::1...
Connected to localhost.
Escape character is '^]'.
HTTP/1.1 200 OK 
Content-Type: text/plain
Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
Date: Mon, 23 Sep 2013 14:33:16 GMT
Content-Length: 11
Connection: close

Hello world
El cliente escribe en la salida estandard:
Connection closed by foreign host.

Casiano Rodriguez León 2015-01-07