Uso de validación de HTTP

El mejor enfoque consiste en utilizar el modelo de validación de HTTP. Este modelo envía cada respuesta con un billete que hace referencia a la singularidad de los datos. Si el cliente quiere descargar el contenido de nuevo, el cliente envía al servidor un billete de la última descarga. El servidor compara el billete enviado con el billete que tiene, y si el servidor de anuncios de los billetes son idénticos, envía un HTTP 304 para indicar que no se han producido cambios. En ese momento, el cliente puede recuperar el contenido de la caché de edad y presentar al usuario como la última y más grande. El modelo de validación HTTP requiere todavía una petición HTTP, pero no incluye el costo de generar y enviar el contenido de nuevo. En términos de una conversación de HTTP, el modelo de validación HTTP se implementa como sigue. Este ejemplo ilustra una solicitud de un cliente y la respuesta del servidor.

 Solicitud 1GET / ajax/chap04/cachedpage.html HTTP/1.1 Accept: * / * Accept-Language: es-ar Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;; . NET CLR 2.0.50215) Host: 127.0.0.1:8081 Connection: Keep-Alive Respuesta 1HTTP/1.1 200 OK ETag: W / "45-1123668584000" Last-Modified: Wed, 10 Aug 2005 10:09:44 GMT Content-Type: text / html Content-Length: 45 Fecha: Wed, 10 Aug 2005 10: 11:54 GMT Server: Apache-Coyote/1.1  Contenido almacenado en caché 
  

El cliente realiza una solicitud para el documento / ajax/chap04/cachedpage.html. El servidor responde con el contenido, pero no hay Cache-Control o identificador de Vence. Esto parece indicar que el contenido devuelto no está en cache, pero eso no es cierto. El servidor ha indicado que está utilizando el modelo de validación de HTTP, y no el modelo de vencimiento de HTTP. La página que se devuelve se ha convertido en parte de una caché identificado por el identificador ETag único. El identificador de ETag, llamado etiqueta de entidad, Podría ser comparado a un código de control único, para una página HTML. La letra W, que se antepone al identificador de etiqueta de entidad significa que la página es una referencia débil y el servidor HTTP no puede reflejar inmediatamente las actualizaciones de la página en el lado del servidor. El siguiente paso es actualizar el navegador y pedir la misma página otra vez. La conversación HTTP es el siguiente.

 Petición 2GET / ajax/chap04/cachedpage.html HTTP/1.1 Accept: * / * Accept-Language: es-ar Accept-Encoding: gzip, deflate If-Modified-Since: Wed, 10 Aug 2005 10:09:44 GMT si - None-Match: W / "45-1123668584000" User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;. NET CLR 2.0.50215) Host: 192.168.1.100:8081 Connection: Keep-Alive Respuesta 2HTTP/1.1 304 Not Modified Date: Wed, 10 Aug 2005 10:11:58 GMT Servidor: Apache-Coyote/1.1

Cuando el cliente hace la segunda petición, los identificadores adicionales If-Modified-Since y Si-No-Match se envían en la petición. Note como el Si-No-las referencias de identificación coincide con el identificador del valor ETag enviado previamente. El servidor consulta la URL y genera una etiqueta de entidad. Si la etiqueta de entidad es idéntico al valor de ser enviado, el servidor devuelve un código HTTP 304 para indicar que el contenido no ha cambiado. Al utilizar etiquetas entidad, el cliente puede enviar un Si o un partido-Si-No-Match. Si el cliente envía un Si-Match, y los datos en el servidor está fuera de fecha, el servidor devuelve un error de caché de error, y no los nuevos datos. Si el cliente envía un Si-No-Match cuando el identificador de servidor de datos no ha cambiado, el servidor envía un código de retorno de HTTP 304. Si los datos no está actualizada, se envía nuevos datos.

La ventaja de utilizar el modelo de validación de almacenamiento en caché de HTTP es que siempre están garantizados para obtener la versión más reciente en el momento de la solicitud. Los clientes pueden hacer la solicitud cada par de segundos, horas, semanas, o de cualquier período de su elección. Corresponde al cliente a decidir cuándo debe obtener una nueva copia de los datos. Por supuesto, todavía hay tráfico HTTP debido a las demandas, pero se ha reducido a aminimum. Habiendo dicho todo esto, hay situaciones cuando se utiliza el modelo de caducidad HTTP tiene sentido por ejemplo, cuando el contenido HTML es estático y los cambios rara vez . El modelo de caducidad HTTP puede utilizarse en el modelo de solicitud único para podar las entradas del controlador de memoria caché cuando se enrarece.

La implementación de un cliente de Caché Uso de validación de HTTP El caché de cliente única petición puede extenderse a utilizar la validación de HTTP. ¿Qué cambios en el modelo de validación de HTTP es que una solicitud física siempre será. Desde la perspectiva de la navegación de metadatos, esto podría causar un pequeño retraso debido a la necesidad de hacer una solicitud para verificar que los datos actuales. Sin embargo, el ciclo de respuesta a la solicitud es bastante rápido, como la mayoría de los casos en una "no cambió" de respuesta. La aplicación completa de las dos funciones necesarias para asíncrona es el siguiente.

 Fuente: / cliente / scripts / Jaxson / var Common.js HttpValidationCacheController = (_cache: new Array (), didNotFindETagError: function (url) ()) function HTTPValProcessAndBreakBeforeRequest (xmlhttp, solicitar, configuración) (if (request.action == "GET" ) (var obj = HttpValidationCacheController._cache [url]; if (obj! = null) ( this.xmlhttp.setRequestHeader ( "Si-No-Match", obj.ETag); (this.xmlhttp.setRequestHeader "Pragma", "no-cache"); (this.xmlhttp.setRequestHeader "Cache-Control", "no-cache");)) Return false;) function HTTPValProcessAndBreakAfterRequest (xmlhttp, solicitar, configuración) (if (xmlhttp.status == 200 & & request.action == "GET") (if (xmlhttp.status == 200) (try (var = foundetag xmlhttp.getResponseHeader ( "ETag"), si (foundetag! = null) (HttpValidationCacheController._cache [url] = ( ETag: foundetag,Estado: xmlhttp.status, StatusText: xmlhttp.statusText, ResponseText: xmlhttp.responseText, responseXML: xmlhttp.responseXML);) else (HttpValidationCacheController.didNotFindETagError (url);)) catch (Exception) (HttpValidationCacheController.didNotFindETagError (url);) ) else if (status == 304) (var obj = HttpValidationCacheController._cache [url]; if (obj! = null) (var fakeXMLHttp = (estado: 200, statusText: obj.StatusText, responseText: obj.ResponseText, responseXML: obj.ResponseXML,) try (settings.onComplete (fakeXMLHttp); return true;) catch (e) (globals.errorHandler (e);)) else (throw new error ( "Server indicó que estos datos está en la caché");))) return false;)

 

Tome un momento para examinar el código. Usted debe ver muchas similitudes con el único cliente de código de caché de solicitud. Las principales diferencias se han destacado en negrita. Una gran diferencia en la solicitud de HTTPValProcessAndBreakBeforeRequest es la adición de las cabeceras HTTP de validación de la identificación de la ETag de una solicitud previamente ejecutadas. Como el uso de la validación de HTTP significa la ejecución de una solicitud, tiene que volver HTTPValProcessAndBreakBeforeRequest falsa en todas las situaciones.

La función HTTPValProcessAndBreakAfterRequest es más complicado porque su lógica es más sofisticada. Si la validación se utiliza HTTP y el servidor soporta la validación HTTP, el servidor puede responder con dos códigos de estado HTTP para cada solicitud: 200 y 304. Si el código de estado es de 200, o bien los datos han cambiado o los datos no ha cambiado nunca.

Independientemente de la razón para el código de estado de 200, los datos se debe agregar a la instancia de caché HttpValidationCacheController. La gran diferencia con respecto a la solicitud única caché de cliente es el almacenamiento adicional de la ETag. Si el código de estado es 304, y luego una instancia de XMLHttpRequest falso se crea y el método settings.onComplete se llama, como se muestra en el único cliente de la aplicación de caché petición. Definir y ejecutar el resto URL de la arquitectura y la aplicación del cliente de un general " qué hacer "la perspectiva es completa. Todavía tenemos que cubrir los detalles de la URL y la arquitectura del servidor. En este punto, quiero mostrar para refrescar la memoria. La separación entre el envío y recepción de datos es muy importante porque es lo que hace posible que un cliente para hacer una petición a día de hoy y pregunte por la respuesta mañana. Si la pregunta y la respuesta tenía que ser en el contexto de una única solicitud, entonces el cliente podría tener que esperar por un tiempo muy largo.

Para poner esto en otro contexto, se puede pensar en la separación de la solicitud y la respuesta como la diferencia entre estar parado en línea para la asistencia en una tienda y seleccionar un número para obtener asistencia. Imagine la cesta de la compra y especialmente algunos del tamaño de las piezas de madera. Cada almacén de madera tiene su propia estrategia de servicio a sus clientes. Una estrategia es tener a los clientes hasta la línea (la cola) y esperar su turno. Pero ¿y si la fila es larga? ¿Quieres tener la tentación de entrar en línea? ¿Qué pasa si usted decide obtener en línea y darse cuenta de que tienes que ir al baño, o si tiene que poner algo de dinero en el parquímetro? En el momento que paso fuera de la línea, usted pierde su posición y tiene que iniciar el juego de la espera desde el principio. Desde una perspectiva arquitectónica colas son molestas para el servidor porque el servidor necesita para gestionar la solicitud y mantener la atención de la conexión del cliente.

Otro enfoque, y uno que es más justo, es que cada cliente que quiere una pieza especial de madera se selecciona un número y se llena en un orden. La orden se somete a un vendedor, y él o ella le dirá más o menos cuando la madera estará disponible. Durante el tiempo de espera, usted puede ir al baño, comer, o ir de compras para otras cosas. El orden y el enfoque simbólico permite desligar la espera de los clientes de la tienda para optimizar el tiempo necesario para preparar las piezas especiales de madera. Por ejemplo, sobre la base de un conjunto de órdenes, la tienda puede poner en cola los pedidos según la prioridad, la capacidad y complejidad. Esta arquitectura es única porque se utiliza un HTTP POST para enviar el pedido, ya cambio usted recibe una indicación de que el código se puede encontrar la respuesta. Usted no tiene que proporcionar la indicación, ya que podría ser determinada mediante programación. En el caso de la solicitud de cotización, la ubicación es determinada mediante programación.

 / pyservices / operador / Histórico / teletipos

Esto representa la raíz de un URL que acepta HTTP POST y GET. La ejecución de un GET se obtendrá una lista de enlaces a todos los resultados disponibles. Los resultados podrían ser los resultados en el sentido puro cálculo o, en el caso de la solicitud de cotización, una lista de símbolos de ser observado. Obtener una lista de todos los resultados disponibles es inútil cuando usted no sabe lo que la lista de medios. La solicitud de cotización, con su cotización es fácil de descifrar porque cada resultado representa un ticker vistos. Pero ¿y si la raíz URL representa un cálculo? La lista de potenciales de los resultados de las URL pueden incluir números aleatorios se utilizan para indexar los resultados individuales. Esto ilustra el hecho de que es muy importante ser capaz de distinguir los resultados basados en algunos de los metadatos. Si no puede hacerlo, usted va a tener problemas importantes.

A veces, sin embargo, no quiero ningún descriptores de metadatos. Si el POST se ejecuta un cálculo en que el resultado sólo es significativo en un contexto específico, entonces es responsabilidad del cliente para hacer un seguimiento de los vínculos. Relacionando este concepto con un carrito de compras, la mayoría de las tiendas tienen ellos, y no hay ningún descriptor de metadatos. Cuando estás en una tienda, usted sabe que le pertenece a usted de compra sobre la base de los artículos en el carro. No hay ningún identificador para el carro, y en las palabras de un gran cómico británico, "Hasta que comprar el contenido de su cesta de la compra, es una gran manera de reordenar la comida en una tienda." Quiero señalar que sí , puede generar resultados sin metadatos, pero estas situaciones son especializados (y será cubierto en el artículo 7). Cuando se realice un envío a la dirección de raíz, están empezando una tarea en el lado del servidor. A partir tareas en un servidor HTTP puede ser difícil porque los servidores HTTP esperar que todo el proceso se completará cuando la solicitud termina. Sin embargo, debido a la naturaleza de los datos, esto es posible, por lo que necesita para ampliar su servidor.

Prolongar su servidor puede ser tan simple como un hilo de ejecución para ejecutar la tarea, o puede significar que una llamada entre procesos para comenzar un proceso para ejecutar la tarea. Independientemente de cómo se ejecuta la tarea, el aspecto importante es la de no ejecutar la tarea en el contexto de la petición. El papel de la entrada es de combinar los datos para una tarea, y luego ejecutar una tarea. Después de que la solicitud ha sido presentada, el servidor debe devolver un identificador que representa la tarea. El identificador puede ser el de metadatos, un número al azar, o algún tipo de relación arbitraria. La información devuelta deben proporcionar datos suficientes para que el cliente algorítmicamente crear un enlace completo a los datos y metadatos.

Si la entrada no proporciona ninguna información sobre el pedido, entonces el supuesto es que el cliente sabe cómo componer los metadatos y los enlaces de los datos presentados. La desventaja de esta estrategia es que si el servidor los cambios de los metadatos lado, el código de cliente tendrá que ser actualizada.

 / pyservices / operador / Histórico / teletipos / DELL

Esta URL representa la URL principal de un resultado. Sólo los verbos HTTP GET y DELETE son compatibles. El verbo puesto puede ser apoyada si desea volver a calcular el resultado de una solicitud. La preocupación con la realización de un nuevo cálculo es que en una situación de multiusuario, otros usuarios verán los nuevos datos y no ser conscientes de que algunas partes de los datos han cambiado. En general, es mejor considerar un resultado como inmutable. El verbo GET es compatible para permitir la recuperación de los resultados. El verbo DELETE se apoya a podar un resultado de la lista. La poda es necesaria para que la caché no se lleno de los resultados de edad que no tienen sentido. En el caso de la solicitud de cotización, DELETE no sería adecuado porque la historia es el ticker de una serie de tiempo, y usted puede volver atrás el reloj. De una serie de poda tiempo sólo es apropiado cuando usted tiene algunos datos que se consideran de edad y no es apropiado para el contexto.

 / pyservices/trader/historical/tickers/DELL/2006

Esta URL representa una parte específica de un resultado y, en su caso, siempre debe ser apoyada. Apoyo a las URL de los niños en un resultado permite que el código de cliente para afinar el resultado.

/ pyservices / operador / Histórico / teletipos / DELL? filter = ahora

Esta URL representa otra forma de afinar los resultados. Por ejemplo, si un resultado genera demasiados datos, usando el filtro con un valor de ahora podría afinar el resultado de los últimos 15. Ajuste corre el riesgo de obtener resultados que faltan. Por ejemplo, digamos que están esperando todos los resultados de un cálculo, por lo que periódicamente llamada para recuperar los últimos 15 resultados. ¿Qué pasa si el período de verificación de una hora, y durante una hora, se generan 30 resultados? Utilizando un filtro para recuperar los últimos 15 significa que se han perdido 15 resultados. Usted no debe utilizar un enfoque basado en tareas para recuperar los últimos 15 deletes1 para mantener la estabilidad y la capacidad de leer los resultados que podrían perderse si un explorador se detuvo la descarga de las datos. ¿Quieres una forma de ejecutar un relleno donde la única caché fiables o mecanismo de almacenamiento es el servidor.

La mejor manera de ajustar los datos devueltos es utilizar un cursor en el conjunto de resultados. Por ejemplo, si hay 15 resultados de un cálculo, además de las URL de cada resultado mencionado se debe hacer referencia utilizando una dirección URL único que identifica el número del resultado. Piense en el número de resultados como parte de una serie de tiempo. En una serie de tiempo, puede recuperar todas las garrapatas en una hora, sino también todas las garrapatas en un minuto y todas las garrapatas en un segundo.

un artículo presentado por Sonja Lande


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "Uso de validación de HTTP", fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.


Online: 291 users browsing the articles directory