Pregunta

Estoy de análisis de datos HTTP directamente de paquetes (TCP reconstruido o no, se puede asumir que lo es).

Estoy buscando la mejor manera de analizar HTTP con la mayor precisión posible.

El principal problema aquí es la cabecera HTTP.

En cuanto a la básica RFC de HTTP / 1.1 , parece que la cabecera HTTP análisis sería complejo. El RFC describe expresiones regulares muy complejos para diferentes partes de la cabecera.

¿Debo escribir estas expresiones regulares para analizar las diferentes partes de la cabecera HTTP?

El análisis básico que he escrito hasta ahora para la cabecera HTTP es genérico para la cabecera HTTP:

message-header = field-name ":" [ field-value ]

Y he incluido la sustitución de LWS interior con SP y repitiendo cabeceras con el mismo field-name con valores separados por comas, como se describe en la sección 4.2.

Sin embargo, mirando a la sección 14.9, por ejemplo, mostraría que con el fin de analizar las diferentes partes del field-value necesito un esquema de análisis mucho más complejo.

¿Cómo sugiere que debería manejar las piezas complejas de análisis HTTP (en concreto el field-value) suponiendo que quiero dar a los usuarios del analizador todas las capacidades de HTTP y analizar cada parte de HTTP?

Diseño sugerencias para esto también se aprecia.

Gracias.

¿Fue útil?

Solución

Me seguiría el director de Responsabilidad Individual. En lugar de intentar crear un único analizador monolítica que conoce cada detalle de cada cabecera HTTP conocido por el hombre, vaya más simple. Escribir un analizador simple extensible que de por sí es responsable de sólo se ocupan de analizar el nombre del campo y asociar ese nombre con el valor en bruto. A continuación, hacer uso de extensiones enchufables que sólo se encargan de analizar un solo tipo de cabecera. Cuando se crea una instancia de su analizador, inyectar una colección de extensiones, y asignar cada extensión a un conjunto de nombres de campo que sabe cómo analizar.

matar dos pájaros de un tiro con este enfoque. Su analizador principal sigue siendo sencilla y selectiva. También obtiene la capacidad de ampliar su programa de análisis sin tener que meterse con alrededor de sus entrañas, lo que resulta en un código más robusto.

Otros consejos

Hay un montón de programas de análisis dentro del espacio de nombres System.Net.Http.Headers. pena de echar un vistazo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top