Pergunta

Estou analisando dados HTTP diretamente de pacotes (TCP reconstruídos ou não, você pode assumir que sim).

Estou procurando a melhor maneira de analisar o HTTP com a maior precisão possível.

O principal problema aqui é o cabeçalho HTTP.

Olhando para o básico RFC de HTTP/1.1, parece que a análise do cabeçalho HTTP seria complexa.A RFC descreve expressões regulares muito complexas para diferentes partes do cabeçalho.

Devo escrever essas expressões regulares para analisar as diferentes partes do cabeçalho HTTP?

A análise básica que escrevi até agora para o cabeçalho HTTP é para o cabeçalho HTTP genérico:

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

E incluí a substituição interna LWS com SP e repetindo cabeçalhos com o mesmo field-name com valores separados por vírgula conforme descrito na seção 4.2.

No entanto, olhar para a secção 14.9, por exemplo, mostraria que, para analisar as diferentes partes do field-value Preciso de um esquema de análise muito mais complexo.

Como você sugere que eu deveria lidar com as partes complexas da análise HTTP (especificamente o field-value) supondo que eu queira fornecer aos usuários do analisador todos os recursos do HTTP e analisar todas as partes do HTTP?

Sugestões de design para isso também seriam apreciadas.

Obrigado.

Foi útil?

Solução

Eu seguiria o Princípio da Responsabilidade Única.Em vez de tentar criar um único analisador monolítico que conheça todos os detalhes de cada cabeçalho HTTP conhecido pelo homem, seja mais simples.Escreva um analisador extensível simples que por si só seja responsável por lidar apenas com a análise do nome do campo e associar esse nome ao valor bruto.Em seguida, use extensões conectáveis ​​que são responsáveis ​​apenas por analisar um único tipo de cabeçalho.Ao criar uma instância do seu analisador, injete uma coleção de extensões e mapeie cada extensão para um conjunto de nomes de campos que ela sabe como analisar.

Você mata dois coelhos com uma cajadada só com essa abordagem.Seu analisador principal permanece simples e direcionado.Você também ganha a capacidade de estender seu analisador sem precisar mexer em suas entranhas, o que resulta em um código mais robusto.

Outras dicas

Há um monte de analisadores dentro do System.Net.Http.Headers espaço para nome. Vale a pena dar uma olhada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top