El middleware es un término general para el software que sirve para "pegar" programas separados, a menudo complejos y ya existentes. Algunos componentes de software que con frecuencia están conectados con middleware incluyen aplicaciones empresariales y servicios web.
Ref:
* http://searchsoa.techtarget.com/definition/middleware
* http://www.webopedia.com/TERM/M/middleware.html
* http://www.softwareag.com/blog/reality_check/index.php/integration-insights/middleware-for-my-mom-or-kids-guide-to-what-i-do/
* http://www.networkcomputing.com/netdesign/cdmwdef.htm
* https://en.wikipedia.org/wiki/Middleware
¿Qué es el middleware?
El middleware es un código que existe entre la solicitud y la respuesta, y que puede tomar la solicitud entrante, realizar acciones basadas en él y completar la respuesta o pasar la delegación al siguiente middleware en la cola.
https://github.com/zendframework/zend-stratigility/blob/master/doc/book/middleware.md
HTTP Middleware proporciona un mecanismo conveniente para filtrar solicitudes HTTP que ingresan a su aplicación. Por ejemplo, Laravel incluye un middleware que verifica que el usuario de su aplicación esté autenticado. Si el usuario no está autenticado, el middleware redirigirá al usuario a la pantalla de inicio de sesión. Sin embargo, si el usuario está autenticado, el middleware permitirá que la solicitud continúe con la aplicación.
http://laravel.com/docs/master/middleware
Silex le permite ejecutar código, que cambia el comportamiento de Silex predeterminado, en diferentes etapas durante el manejo de una solicitud a través de MiddleWares:
http://silex.sensiolabs.org/doc/middlewares.html
El propósito del middleware es inspeccionar, analizar o modificar el entorno, la solicitud y la respuesta de la aplicación antes y/o después de que se invoca la aplicación Slim.
http://docs.slimframework.com/middleware/overview/
Todos los mensajes HTTP consisten en que se utiliza la versión del protocolo HTTP, encabezados y un cuerpo de mensajes. Una solicitud se basa en el mensaje para incluir el método HTTP utilizado para realizar la solicitud y la URI a la que se realiza la solicitud. Una respuesta incluye el código de estado HTTP y la frase de razón.
...
Ya sea que sea un programador o no, lo ha visto en todas partes en la web. En este momento, la barra de dirección de su navegador muestra algo que comienza con "http: //". Incluso tu primer guión de Hello World envió encabezados HTTP sin que te das cuenta. En este artículo, vamos a aprender sobre los conceptos básicos de los encabezados HTTP y cómo podemos usarlos en nuestras aplicaciones web.
La respuesta HTTP que un servidor envía a un cliente contiene encabezados que identifican el tipo de contenido en el cuerpo de la respuesta, el servidor que envió la respuesta, cuántos bytes hay en el cuerpo, cuando se envió la respuesta, etc. Php y Apache normalmente cuidan los encabezados por usted, identificando el documento como HTML , calculando la longitud de la página HTML y así. La mayoría de las aplicaciones web nunca necesitan establecer encabezados ellos mismos. Sin embargo, si desea enviar algo que no sea HTML, establezca el tiempo de vencimiento para una página, redirige el navegador del cliente o genere un error HTTP específico, deberá usar la función Header ().
*How to See HTTP Headers*
* Firebug extensions to analyze HTTP headers.
1. Turn in Firebug
2. Click Net
3. Click Headers
Ref:
* http://docstore.mik.ua/orelly/webprog/php/ch07_05.htm
* http://code.tutsplus.com/tutorials/http-headers-for-dummies--net-8039
*Headers already sent: Why does it happen?*
To understand why headers must be sent before output it's necessary to look at a typical HTTP response. PHP scripts mainly generate HTML content, but also pass a set of HTTP/CGI headers to the webserver:
HTTP/1.1 200 OK
Powered-By: PHP/5.3.7
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
<html><head><title>PHP page output page</title></head>
<body><h1>Content</h1> <p>Some more output follows...</p>
and <a href="/"> <img src=internal-icon-delayed> </a>
The page/output always follows the headers. PHP has to pass the headers to the webserver first. It can only do that once. After the double linebreak it can nevermore amend them.
When PHP receives the first output (print, echo, <html>) it will flush all collected headers. Afterwards it can send all the output it wants. But sending further HTTP headers is impossible then.
PHP no tiene soporte incorporado para mensajes HTTP.
...
Las transmisiones PHP son la forma más conveniente y ubicua de enviar solicitudes HTTP, pero representan una serie de limitaciones con respecto a la configuración de SSL correctamente, y proporcionar una interfaz engorrosa en torno a configurar cosas como encabezados. Curl proporciona un conjunto de características completo y ampliado, pero, como no es una extensión predeterminada, a menudo no está presente. La extensión HTTP sufre del mismo problema que el rizo, así como el hecho de que tradicionalmente ha tenido muchos menos ejemplos de uso.
La mayoría de las bibliotecas modernas de clientes HTTP tienden a abstraer la implementación, para garantizar que puedan trabajar en cualquier entorno en el que se ejecute y en cualquiera de las capas anteriores.
Notas:
cURL allows you to connect and communicate to many different types of servers with many different types of protocols.
(http://php.net/manual/en/intro.curl.php)
PHP utiliza API del servidor (SAPI) para interpretar las solicitudes HTTP entrantes, la entrada del mariscal y pasar el manejo a los scripts. El diseño original de SAPI reflejó la interfaz de puerta de enlace común, lo que reuniría los datos y los empujaría a las variables de entorno antes de pasar la delegación a un script; El script luego extraería de las variables de entorno para procesar la solicitud y devolver una respuesta.
El diseño de SAPI de PHP abstrae fuentes de entrada comunes, como cookies, argumentos de cadena de consultas y contenido publicado con URL a través de superglobals ($ _cookie, $ _get y $ _post, respectivamente), proporcionando una capa de conveniencia para los desarrolladores web.
...
El uso directo de superglobals tiene una serie de preocupaciones. Primero, estos son mutables, lo que hace posible que las bibliotecas y el código alteren los valores y, por lo tanto, alteren el estado para la aplicación. Además, los superglobals hacen que las pruebas de unidad y de integración sean difíciles y frágiles, lo que lleva a la degradación de la calidad del código.
...
Finalmente, cuando se trata de respuestas del lado del servidor, PHP se pone a su manera: cualquier contenido emitido antes de una llamada al encabezado () dará como resultado que esa llamada se convierta en una OP NO-OP; Dependiendo de la configuración de informes de errores, esto a menudo puede significar encabezados y/o estado de respuesta no se envían correctamente. Una forma de trabajar en torno a esto es usar las características de amortiguación de salida de PHP, pero el anidamiento de los búferes de salida puede volverse problemático y difícil de depurar. Los marcos y las aplicaciones tienden a crear abstracciones de respuesta para agregar encabezados y contenido que pueden emitirse a la vez, y estas abstracciones a menudo son incompatibles.
Ref: http://www.php-fig.org/psr/psr-7/meta/
Puede usar variables de superglobals (como $ _get y $ _post), pero son un estado mutable global. Junto con esta unidad y las pruebas de integración de su código se vuelven difíciles.
Por estas razones, muchos marcos PHP decidieron implementar una abstacción para representar los mensajes HTTP (ver, por ejemplo, Symfony Httpfoundation o Zend Http).
Esto condujo a una situación en la que cualquier aplicación se basó en una implementación específica de los mensajes HTTP, de modo que apenas se podía usar en proyectos construidos utilizando otros marcos.
Esta es la razón por la cual un conjunto común de interfaces ayuda a los mensajes HTTP abstractos y a trabajar con ellos de manera agnóstica marco.
Ref: http://stackoverflow.com/questions/32805681/php-why-http-message-implementations
HTTP se utiliza para transmitir recursos, no solo archivos. Un recurso es una parte de la información que puede identificarse mediante una URL (es la R en URL). El tipo de recurso más común es un archivo, pero un recurso también puede ser un resultado de consulta generado dinámicamente, la salida de un script CGI, un documento que está disponible en varios idiomas u otra cosa.
Árbitro:
* http://www.w3schools.com/tags/ref_httpmessages.asp
* https://www.jmarshall.com/easy/http/