Вопрос

Я разбираю HTTP Data прямо из пакетов (либо TCP реконструирован, либо нет, вы можете предположить, что это).

Я ищу лучший способ анализировать HTTP как можно точнее.

Основная проблема здесь является заголовка HTTP.

Глядя на основные RFC http / 1.1, Кажется, что разборка заголовка HTTP будет сложным. RFC описывает очень сложные регулярные выражения для разных частей заголовка.

Должен ли я написать эти регулярные выражения для разбора разных частей заголовка HTTP?

Основные расставания, которые я написал до сих пор для заголовка HTTP предназначен для общего заголовка HTTP:

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

И я включил замена внутреннего LWS с участием SP и повторяющиеся заголовки с тем же field-name С разделенными запятыми значениями, как описано в разделе 4.2.

Тем не менее, глядя на раздел 14.9, например, показывает, что для того, чтобы разбирать разные части field-value Мне нужна гораздо более сложная схема разборки.

Как вы предлагаете, я должен обрабатывать сложные части HTTP Parsing (специально field-value) Предполагая, что я хочу дать пользователям парсеров полные возможности http и разбирать каждую часть http?

Предложения дизайна для этого также будут оценены.

Спасибо.

Это было полезно?

Решение

Я бы следовал директору одной ответственности. Вместо того, чтобы пытаться создать один монолитный парсер, который знает каждую деталь каждого HTTP-заголовка, известного человеку, упростить. Напишите простой расширяемый анализатор, который в самом себе несет ответственность за то, что справляется с разбором имени поля и связать это имя с помощью необработанного значения. Затем воспользуйтесь подключаемыми расширениями, которые отвечают только за анализ одного вида заголовка. Когда вы создаете экземпляр вашего анализатора, введите сбор расширений, и набрать каждое расширение на набор имен полей, которые он знает, как разбираться.

Вы убиваете двух птиц одним камнем с таким подходом. Ваш основной парсер остается простым и целевым. Вы также получаете возможность расширить свой анализатор без необходимости беспорядок с его кишками, что приводит к более надежному коду.

Другие советы

Внутри парсеров есть куча парсеров System.Net.Http.Headers пространство имен. Стоит посмотреть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top