Domanda

Sono i dati di analisi HTTP direttamente dai pacchetti (TCP ricostruito o meno, si può presumere che sia).

sto cercando il modo migliore per analizzare HTTP nel modo più accurato possibile.

Il problema principale qui è la header HTTP.

Guardando la base RFC di HTTP / 1.1 , sembra che header HTTP analisi sarebbe complessa. Il RFC descrive molto complesse espressioni regolari per le diverse parti l'intestazione.

Dovrei scrivere queste espressioni regolari per analizzare le diverse parti del header HTTP?

L'analisi di base che ho scritto finora per HTTP intestazione è per il generico HTTP intestazione:

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

E ho incluso sostituendo LWS interno con SP e ripetendo le intestazioni con lo stesso field-name con virgola valori separati come descritto nella sezione 4.2.

Tuttavia, guardando la sezione 14.9 per esempio potrebbe dimostrare che, al fine di analizzare le diverse parti del field-value ho bisogno di un sistema di analisi molto più complesso.

Come mi consiglia devo gestire le parti complesse di HTTP analisi (in particolare il field-value) assumendo che voglio dare agli utenti parser tutte le funzionalità del HTTP e di analizzare ogni parte del HTTP?

suggerimenti di progettazione per questo sarebbe anche apprezzato.

Grazie.

È stato utile?

Soluzione

I seguirebbe il direttore della Responsabilità singolo. Piuttosto che cercare di creare un unico parser monolitico che conosce ogni dettaglio di ogni intestazione HTTP che l'uomo conosca, andare più semplice. Scrivere un semplice parser estensibile che in sé e per sé è responsabile solo di fronte ad analisi il nome del campo e l'associazione che il nome con il valore grezzo. Poi fare uso di estensioni innesto che sono responsabili solo per analizzare un unico tipo di intestazione. Quando si crea un'istanza del parser, iniettare una raccolta di estensioni, e mappare ogni estensione ad una serie di nomi di campo che sa come analizzare.

prendere due piccioni con una fava con questo approccio. Il tuo parser nucleo rimane semplice e mirato. È inoltre acquisire la capacità di estendere il parser senza dover pasticciare con le sue viscere, che si traduce in codice più robusto.

Altri suggerimenti

Ci sono un sacco di parser all'interno del namespace System.Net.Http.Headers. Ne vale la pena di dare un'occhiata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top