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

bri*_*ner 4 .net c# parsing http rfc2616

我正在直接从数据包中解析HTTP数据(无论是TCP重构还是非重构,你都可以认为是这样).

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

这里的主要问题是HTTP标头.

看一下HTTP/1.1的基本RFC,似乎HTTP头解析会很复杂.RFC描述了标头不同部分的非常复杂的正则表达式.

我应该编写这些正则表达式来解析HTTP头的不同部分吗?

到目前为止我为HTTP标头编写的基本解析是针对通用HTTP标头:

message-header = field-name ":" [ field-value ]
Run Code Online (Sandbox Code Playgroud)

和我已经包含替换内LWSSP和重复使用相同的报头field-name,如第4.2节描述的逗号分隔值.

但是,以第14.9节为例可以看出,为了解析field-value我的不同部分,我需要一个更复杂的解析方案.

您如何建议我应该处理HTTP解析的复杂部分(特别是field-value),假设我想为解析器用户提供HTTP的全部功能并解析HTTP的每个部分?

对此的设计建议也将不胜感激.

谢谢.

jri*_*sta 7

我会遵循单一责任的原则.而不是试图创建一个单一的整体解析器,它可以了解人类已知的每个HTTP头的每个细节,而不是更简单.编写一个简单的可扩展解析器,它本身只负责处理解析字段名称并将该名称与原始值相关联.然后使用可插入的扩展,它只负责解析一种类型的头.当您创建解析器的实例时,请注入一组扩展,并将每个扩展映射到它知道如何解析的一组字段名称.

用这种方法你一石二鸟.您的核心解析器仍然简单且有针对性.您还可以扩展解析器,而不必乱用它的内容,从而产生更强大的代码.