2010-06-13 4 views
4

패킷에서 직접 HTTP 데이터를 구문 분석하고 있습니다 (TCP 재구성 여부는 가정합니다).HTTP 헤더 필드 값의 모든 부분을 구문 분석

가능한 한 정확하게 HTTP를 구문 분석하는 가장 좋은 방법을 찾고 있습니다.

주요 문제는 HTTP 헤더입니다.

기본 RFC of HTTP/1.1을 보면 HTTP 헤더 구문 분석이 복잡해 보입니다. RFC는 헤더의 다른 부분에 대해 매우 복잡한 정규 표현식을 설명합니다.

이러한 정규 표현식을 작성하여 HTTP 헤더의 다른 부분을 구문 분석해야합니까?

내가 HTTP 헤더에 대한 지금까지 작성한 기본 구문 분석은 일반 HTTP 헤더를위한 것입니다

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

그리고 쉼표로 구분와 같은 field-name와 헤더를 SP와 내부 LWS을 교체하고 반복 포함 시켰습니다 값은 섹션 4.2에서 설명합니다.

그러나 예를 들어 섹션 14.9를 보면 field-value의 여러 부분을 구문 분석하기 위해 훨씬 복잡한 구문 분석 체계가 필요하다는 것을 알 수 있습니다.

파서 사용자에게 HTTP의 모든 기능을 제공하고 HTTP의 모든 부분을 구문 분석하기 위해 HTTP 구문 분석 (특히 field-value)의 복잡한 부분을 처리해야한다고 제안하는 방법은 무엇입니까?

디자인 제안은 또한 감사하겠습니다.

감사합니다.

답변

7

필자는 Single Responsibility Principal을 따를 것입니다. 사람에게 알려진 모든 HTTP 헤더의 모든 세부 사항을 알고있는 하나의 모 놀리 식 파서를 만들려고 시도하는 것이 아니라 더 간단하게 진행하십시오. 필드 이름을 구문 분석하고 해당 이름을 원래 값과 연관시키는 역할을하는 간단한 확장 가능 구문 분석기를 작성하십시오. 그런 다음 단일 유형의 헤더를 구문 분석하는 책임 만있는 플러그 가능한 확장을 사용하십시오. 파서의 인스턴스를 만들 때 확장 모음을 삽입하고 각 확장명을 구문 분석 방법을 알고있는 필드 이름 집합에 매핑합니다.

당신은이 접근법으로 한 돌로 두새를 죽입니다. 핵심 파서는 단순하고 목표로합니다. 또한 내장 된 기능을 사용하지 않고 파서를 확장 할 수 있으므로 더 강력한 코드가 생성됩니다.

1

System.Net.Http.Headers 네임 스페이스 내에는 많은 수의 파서가 있습니다. 봐줄 가치가있어.