miércoles, 23 de febrero de 2011

Manipulando las cabeceras HTTP con php

¿Qué es HTTP?

HTTP es el protocolo de transmisión de datos que le da vida a la gran telaraña mundial de la Web, es lo que permite que hoy cree un blog y tú lo puedas leer, este protocolo se basa en transacciones independientes una de otra y sigue el esquema petición respuesta entre cliente-servidor, cada transacción consta de una línea de petición, cabecera general, cabecera de solicitud o respuesta, cabecera de entidad y cuerpo de entidad.

Este protocolo NO guarda la información sobre conexiones anteriores. Para el desarrollo de aplicaciones Web dinámicas se requiere mantener alguna información y para ello se instaura la noción de sesiones del lado del servidor y también se pueden guardar pequeñas cantidades de información en las en el navegador, ha esta información que se guarda en el navegador se le llaman cookies.

Para profundizar más sobre el protocolo pueden visitar:

http://es.wikipedia.org/wiki/Hypertext_Transfer_Protocol

¿Como manipular las cabeceras HTTP con php?

Php tiene la función header() que le permite al programador manejar esas cabeceras de respuesta que se envían de el servidor al cliente dándole mayor poder a nuestros códigos. Esta función se debe utilizar por ejemplo cuando vamos a mostrar una imagen o un documento xml, cuando vamos a redirigir la pagina actual y esto lo vamos a hacer con php. Otra función importante también es setcookie() que se encarga de enviar guardar cookies en el navegador.

Aquí les dejo unos ejemplos de la funcion header y setcookie:

Header("Content-type: image/png"); // esta cabecera le indica al navegador el mime type
header("Location: http://www.google.com.ve"); // le dice al navegador que cambia la url a google
header("HTTP/1.0 404 Not Found"); // manda el error 404 al navegador
setcookie("TestCookie", 'valor de la cookie'); //manda la cookie al navegador.
Header("Content-disposition: attachment; filename=photo.jpg");//forza la descarga de un archive


Las cabeceras deben ser enviadas antes de cualquier salto de línea, letra o lo que sea, sino nos dará un error como el siguiente:

Warning: Cannot modify header information - headers already sent by (output started at  xxxx:17) in xxxxx  on line 19


Si nos sale este error es porque ya a habido una salida y no se pueden modificar las cabeceras, por eso también debemos estar pendientes de cualquier espacio o salto de línea antes de iniciar nuestras etiquetas.

No hay comentarios:

Publicar un comentario