TCP UDP
IP
Internet
n
n
n
TCP/IP
n
Servidor (host)
Servidores y
puertos
puerto 25
direccin
IP
email:
SMTP
puerto 80
Web:
HTTP
Puerto (TCP)
n
Web:
protocolo HTTP (puerto 80), HTTPS (443)
Email:
protocolo SMTP (puerto 25), POP3 (110), IMAP143)
Shell segura: protocolo SSH (puerto 22)
URIs y
URLs
Formato de un URL:
<schema:><//><authority></path><?query><#anchor>
<schema:> = protocolo o esquema de acceso al recurso
<authority> = <UserInfo@><host><:port>
</path>
= identificador del recurso en el servidor
<?query>
= parmetros enviados al recurso
<#anchor> = fragmento o parte del recurso
http://es.wikipedia.org/wiki/Localizador_de_recursos_uniforme
HTTP
Transaccin HTTP
1a linea
Host: upm.es
Solicitud
HTTP
Cliente
Web
(HTTP)
TCP
........
Servidor
Web
(HTTP)
Respuesta
HTTP
UDP
Circuito
virtual TCP
Circuito
virtual TCP
User-Agent: Mozilla/5.0
Cuerpo
UDP
1a linea
HTTP/1.1 200 OK
Server: Apache/1.3.6
Router
IP
IP
Red 1
IP
....
Router
IP
IP
....
....
Red n
IP
parmetros
Content-type: text/html
de cabecera
..........
Content-length: 608
Cuerpo:
<html> .. </html>
Solicitud
1a linea
Parmetros
de cabecera
Formato
Respuesta
Cuerpo
1a linea
Parmetros
de cabecera
Cuerpo
Host: upm.es\n
Accept: text/*, image/*\n
Accept-language: en, sp\n
........
User-Agent: Mozilla/5.0\n
\n
Server: Apache/1.3.6\n
Content-type: text/html\n
..........
Content-length: 608\n
\n
<html> .. </html>
Tipos MIME
Host: upm.es
........
User-Agent: Mozilla/5.0
Cuerpo
Tipos: application, audio, example, image, message, model, multipart, text, video
Respuesta HTTP GET
Ejemplos:
n
n
n
n
1a linea
HTTP/1.1 200 OK
Server: Apache/1.3.6
parmetros
Content-type: text/html
de cabecera
..........
Content-length: 608
Cuerpo:
Pg. HTML
<html> .. </html>
HTTP utiliza el tipo mime para tipar el contenido del cuerpo (body)
n
n
100 Continue
200 OK
201 Created
Redireccin (3xx)
n
// Recurso no encontrado
n
n
n
// Recurso ya no esta
410 Gone
// Recurso ya no esta
HTTP/1.1 200 OK
Server: Apache/1.3.6
parmetros
Content-type: text/html
de cabecera
..........
Content-length: 608
Cuerpo:
Pg. HTML
<html> .. </html>
500 Internal Server Error // El servidor tiene errores, p.e. error lectura disco, .
9
(Create)
(Read)
(Update)
(Delete)
ms mtodos
HEAD:
similar a GET, pero solo pide cabecera al servidor
OPTIONS: Determinar qu mtodos acepta un servidor
TRACE:
Trazar proxies, caches, hasta el servidor
CONNECT: Conectar a un servidor a travs de un proxy
...........
10
Servidor Web
Juan Quemada, DIT - UPM
11
Servidor Web
Programa residente en la mquina servidora
n
El URL Web lleva asociado solo el mtodo GET del protocolo HTTP
Servidor sirve
recursos Web que
pueden estar en
ficheros o BBDD
12
Los ficheros del directorio y sus subdirectorios son accesibles con HTTP GET
El directorio de recursos (pginas, ..) Web suele denominarse public, www, ..
1) Navegador solicita
http://xx.es/dir/hola1.html
2) Navegador
visualiza pgina
Servidor xx.es
sirve pginas
Web del
pueden estar
en directorio
reservado
13
URL Web
URL Web: direccin de recurso accesible con HTTP GET
n
EL URL Web solo permite navegar por pginas Web, pero no modificar recursos
http://upm.es/dir/hola1.html
Ruta (path)
n
14
URLs relativos
Son relativos al URL (recurso) actual
n
/lib/coches/vw.html
coches/vw.html,
vw.html
15
el navegador muestra el cdigo HTML si una pgina HTML lleva el tipo text/plain
w En vez de el tipo mime text/html, que es el tipo que debera llevar
16
100 Continue
200 OK
201 Created
Redireccin (3xx)
n
405 Method Not Allowed // Mtodo no permitido, p.e. se solicita mtodo POST, PUT, .
409 Conflict
410 Gone
// Recurso ya no esta
500 Internal Server Error // El servidor tiene errores, p.e. error lectura disco, .
17
Introduccin a express.js y al
middleware static
Juan Quemada, DIT - UPM
18
node.js y express
Express: paquete para crear servicios Web
n Accesibles por HTTP desde clientes
w Mas informacin: http://expressjs.com
express se basa en node.js y se instala con npm
n desde el servidor central en https://www.npmjs.org
..$ mkdir apps // crear un directorio para las apps express
..$ cd apps
19
Una vez instalado, un MW se ejecuta con cada solicitud HTTP que llega a app
w Doc: http://expressjs.com/4x/api.html#app.use
20
Aplicacin
express.js
Middleware
static
Un middleware se instala invocando el mtodo use() en app. Una
vez instalado, se ejecuta cada vez que llega una solicitud HTTP.
app.use(express.static(path.join(__dirname, 'public'))) instala el
middleware con el servidor de pginas Web estticas, incluido en
express. Las pginas deben alojarse en el directorio public.
Mas info en: http://expressjs.com/4x/api.html#middleware.builtin
path es un mdulo de node.js de gestin de rutas. Y path.join(..)
concatena dos rutas. Mas info: http://nodejs.org/api/path.html
__dirname: ruta (path) al directorio de ejecucin de la aplicacin.
Mas info en: http://nodejs.org/api/globals.html
22
Como
funciona el
MW static
El middleware static, igual que el resto de middlewares de la
aplicacin express, se ejecuta al llegar una solicitud HTTP al
servidor en el puerto 8000. El middleware static analiza el mtodo, la
ruta (path) y los parmetros de la solicitud HTTP y responde de la
siguiente forma:
1) Solo acepta solicitudes de tipo GET y rechaza el resto (POST,
PUT, DELETE, .) con 405 METHOD NOT SUPPORTED.
2) Si la ruta (path) referencia un fichero existente en el repositorio
de recursos Web, lo devuelve con 200 OK y parmetros asociados.
3) La respuesta al resto de solicitudes GET incluye el cdigo de
error correspondiente: 404 NOT FOUND (recurso no existe), 500
INTERNAL SERVER ERROR (error de servidor), .
23
Pgina dir/hola1.html
La captura del navegador Firefox con la consola abierta y
con red (Net) seleccionado, muestra la transaccin GET
realizado para traer al navegador la pgina identificada por:
http://localhost:8000/dir/hola1.html
24
Cabecera express.js
La consola Firefox permite ver los parmetros
de la solicitud y la respuesta al clicar encima.
- Status 200 OK: respuesta incluye recurso
- Content-Type: text/html; charset=UTF-8
-> indica pgina HTML en UTF-8
- Content-Length: 95
-> indica que el cuerpo lleva 95 octetos
Los dems parmetros se ven ms adelante.
http://localhost:8000/dir/hola1.html
25
Pgina hola.html
El servidor static sirve pginas
alojadas en el directorio public.
Sirve tanto pginas HTML como
otros recursos enlazados, como la
hoja de estilo hola.css de la
pgina hola.html.
Cada recurso se sirve con una
operacin HTTP GET diferente.
26
CURL
Conexin HTTP
Introduccin a REST
Juan Quemada, DIT - UPM
28
Que es REST
REST: REpresentational State Transfer
n El estado se representa en el recurso transferido al cliente
w http://en.wikipedia.org/wiki/Representational_state_transfer
29
Interfaces REST
Interfaz REST
n
GET:
trae al cliente (lee) un recurso identificado por un URL
POST: crea un recurso identificado por un URL
PUT:
actualiza un recurso identificado por un URL
DELETE: borra un recurso identificado por un URL
..... (HTTP tiene mas mtodos, pero no pertenecen al interfaz uniforme)
upm.es
google.com
apple.es
30
Principios REST
Direccionabilidad (Addressability) de los recursos
Uso del interfaz uniforme de HTTP: GET, POST, PUT y
DELETE
Comunicacin sin estado en el servidor (Statelessness)
Servicio hipermedia (Connectedness) conectado con URLs
Recursos en formatos abiertos: HTML, XML, JSON, RSS,
texto plano,
31
Los recursos se procesan solo con los mtodos del interfaz uniforme
w GET, POST, PUT y DELETE
32
Solicitud
Seguridad e idempotencia
Respuesta
Operacin idempotente
n
x=2 es idempotente,
PUT /usuario/2007?edad=9
Internet no es fiable
n
POST:
GET:
PUT:
DELETE:
35
n
n
n
n
HTTP usa el tipo MIME para tipar los recursos que transfiere
36
37
Mtodos de Ruta
Documentacin
n Doc: http://expressjs.com/4x/api.html#app.VERB
38
Ruta GET
39
MW static
y ruta
40
Prioridad
- /mi_ruta
- /mi_ruta/
- /mi_ruta/index.html
El MW de la ruta get(.)
nunca se ejecutar,
porque el MW static
atiende antes la peticin
y responde.
41
Ms
rutas
42
Parmetros
req y res
function(req, res) {..}
La documentacin de la API de
express en
http://expressjs.com/4x/api.html
contiene toda la informacin
sobre las aplicaciones express,
los middlewares y sobre los
objetos que se manejan, como
req y res.
43
RESPUESTA:
Objeto res:
parms de la
respuesta
GET /mi_ruta
HTTP1.1 200 OK
44
Objeto res:
parms de
la respuesta
45
CURL
Conexin HTTP
47
'/hola/:n'
n '/service/:op/user/:id'
n
// donde :n es un parmetro
// donde :op e :id son parmetros
Parmetros de ruta
Condiciones
en parmetros
50
Composicin y
ejecucin de middlewares
Juan Quemada, DIT - UPM
51
Middleware express
Middleware express
n
53
Parmetros de un middleware
Un middleware tiene estos 3 primeros parmetros
n
MW(req, res),
Parmetros de un middleware
n
n
n
n
54
Contador
de visitas
55
middleware
get()
56
middleware
de error
57
Formulario GET
Juan Quemada, DIT - UPM
59
Accept-language: en, sp
........
User-Agent: Mozilla/5.0
Solicitud HTTP:
GET /hola?user=Paco&id=7
Solicitud formulario
Envo formulario
Envio parmetros
Formulario: ejemplo
61
Solicitud formulario
Envo formulario
Envio parmetros
Host: upm.es
Accept: text/*, image/*
Accept-language: en, sp
........
User-Agent: Mozilla/5.0
Resultado envo
62
Transaccin 1: carga el
formulario e,n el cliente
Transaccin 2: enva datos al
servidor y recibe respuesta.
Los datos de query se
guardan en express en
propiedades de req.query
del mismo nombre que cada
<input name=user> del
formulario: req.query.user
63
URL Encode
Juan Quemada, DIT - UPM
64
Reglas de codificacin
n
n
a-zA-Z0-9- _ . ~!()
Ejemplo: http://wb.es/foto?n=Paco+Garc%C3%ADa
65
Envo de parmetros
URL encoded en query
Solicitud
formulario
Envo
formulario
GET /hola?user=Paco+%2B+%26+%25+%24 HTTP/1.1
Envio
parmetros
Host: upm.es
Accept: text/*, image/*
Accept-language: en, sp
........
User-Agent: Mozilla/5.0
Resultado
envo
66
Doc: http://nodejs.org/api/querystring.html
67
Formulario POST
Juan Quemada, DIT - UPM
68
Parmetros en POST
Content-type: application/x-www-form-urlencoded
Content-length: 17
user=Paco+Perez
id=47&user=Paco+Perez
n Los parmetros pueden tener cualquier tamao
Solicitud formulario
Envo formulario
Envio parmetros
Resultado envo
69
Solicitud formulario
Envo formulario
Envio parmetros
Host: upm.es
Accept: text/*, image/*
........
Content-type: application/x-www-form-urlencoded
Content-length: 17
Envo resultado
user=Paco+Perez
70
Formulario
con POST
71
72
73
Parmetro oculto
Parmetro oculto
n
74
Method Override
Un formulario solo puede enviar GET y POST al servidor
n
_method=PUT o _method=DELETE
w Es una convencin que indica que PUT o DELETE van encapsulados POST
n
methodOverride()
methodOverride() se instala
con use() como otros
middlewares y desencapsula
PUT y DELETE encapsuladas
dentro de POST.
En el ejemplo se envan en body
los parmetros (urlencoded):
_method=put&user=Paco
As las acciones PUT o DELETE
se definen con put() y delete(),
igual que get() o post().
76
77