代码之家  ›  专栏  ›  技术社区  ›  brickner

分析HTTP头字段值的每个部分

  •  4
  • brickner  · 技术社区  · 15 年前

    我直接从数据包分析HTTP数据(无论TCP是否重建,您都可以假设它是)。

    我正在寻找尽可能准确地解析HTTP的最佳方法。

    这里的主要问题是HTTP头。

    看看基本的 RFC of 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解析的复杂部分(特别是 字段值 )假设我想向解析器用户提供HTTP的全部功能并解析HTTP的每个部分?

    对此,我们也会感谢您的设计建议。

    谢谢。

    2 回复  |  直到 9 年前
        1
  •  7
  •   jrista    15 年前

    我将遵循单一责任原则。与其尝试创建一个了解人类所知的每个HTTP头的每个细节的单块解析器,不如简单一些。编写一个简单的可扩展解析器,它本身负责解析字段名并将该名称与原始值关联。然后利用只负责解析单一类型头的可插拔扩展。创建解析器实例时,插入一组扩展,并将每个扩展映射到它知道如何解析的一组字段名。

    你用这种方法一石二鸟。您的核心解析器保持简单和有针对性。您还可以扩展您的解析器,而不必纠结于它的内部结构,这会产生更健壮的代码。

        2
  •  1
  •   MoonStom    9 年前

    里面有一堆解析器 System.Net.Http.Headers 命名空间。值得一看。

    推荐文章