El navegador
internamente hace peticiones HTTP de la siguiente forma:
- Establece un socket TCP con la máquina de destino. Internamente, el sistema a 3 pasos (SYN,SYN-ACK,ACK) a nivel de red. Si es una dirección DNS primero la busca en la caché y si no existe realiza una petición mediante UDP al servidor DNS.
- Una vez establecido el socket, realiza una petición HTTP y establece un listener interno a la escucha de la respuesta.
- El servidor remoto, en cualquier momento, responde con una respuesta HTTP con las cabeceras asignadas (con el content-type a imagen) y el body de la respuesta con el contenido binario de la imagen.
Ajax no es el navegador, es una herramientilla que se proporciona para realizar peticiones asíncronamente, pero es una herramienta, que no tiene el potencial de las funciones internas del navegador. Para mostrar imágenes mediante ajax se hace lo que explica emprear, se usa
base64, que es texto, la limitación propia de ajax.
La explicación a esto es evidente, ajax maneja texto, si viste alguna vez una tabla de carácteres ascii verás que no todos son imprimibles como texto sino que hay muchos carácteres que no se pueden imprimir y que forman parte natural del contenido de una imagen. Por ejemplo, marqué en amarillo la parte donde terminan las cabeceras (retorno de carro - nueva línea =
0d - 0a x 2) y comienza el contenido de la imagen, verás que hay caracteres que no se pueden imprimir (aparecen como un punto a la derecha), incluso caracteres nulos.
Petición HTTP:
Código HTTP:
Ver originalGET /hphotos-ak-ash3/550081_405979536099703_254407733_n.jpg HTTP/1.1
Host: sphotos-g.ak.fbcdn.net
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Respuesta a la petición. (
200)
Código HTTP:
Ver originalHTTP/1.1 200 OK
Content-Type: image/jpeg
Last-Modified: Fri, 01 Jan 2010 00:00:00 GMT
X-Backend: hs833.ash3
X-BlockId: 550081
X-Object-Type: PHOTO
Content-Length: 63937
Date: Sun, 31 Mar 2013 05:09:34 GMT
Connection: keep-alive
Cache-Control: max-age=1209600
......JFIF..............*.....ICC_PROFILE.......lcms....mntrRGB XYZ .........).9acspAPPL...................................-lcms...............................................
desc.......^cprt...\....wtpt...h....bkpt...|..