c# – 解析HTTP头字段值的每个部分
作者:互联网
我正在直接从数据包中解析HTTP数据(无论是TCP重构还是非重构,你都可以认为是这样).
我正在寻找尽可能准确地解析HTTP的最佳方法.
这里的主要问题是HTTP标头.
看一下基本的RFC of HTTP/1.1,似乎HTTP头解析会很复杂.
RFC描述了标头不同部分的非常复杂的正则表达式.
我应该编写这些正则表达式来解析HTTP头的不同部分吗?
到目前为止我为HTTP标头编写的基本解析是针对通用HTTP标头:
message-header = field-name ":" [ field-value ]
我已经包括用SP替换内部LWS并使用逗号分隔值重复具有相同字段名称的标头,如4.2节所述.
但是,以第14.9节为例,可以看出,为了解析字段值的不同部分,我需要一个更复杂的解析方案.
您如何建议我应该处理HTTP解析的复杂部分(特别是字段值),假设我想为解析器用户提供HTTP的全部功能并解析HTTP的每个部分?
对此的设计建议也将不胜感激.
谢谢.
解决方法:
我会遵循单一责任的原则.而不是试图创建一个单一的整体解析器,它可以了解人类已知的每个HTTP头的每个细节,而不是更简单.编写一个简单的可扩展解析器,它本身只负责处理解析字段名称并将该名称与原始值相关联.然后使用可插入的扩展,它只负责解析一种类型的头.在创建解析器的实例时,请注入一组扩展,并将每个扩展映射到它知道如何解析的一组字段名称.
用这种方法你一石二鸟.您的核心解析器仍然简单且有针对性.您还可以扩展解析器,而不必乱用它的内容,从而产生更强大的代码.
标签:c,http,net,parsing,rfc2616 来源: https://codeday.me/bug/20190610/1213236.html