我正在直接从数据包中解析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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。