pserver]如何解析HTTP请求报文
在上一篇文章中,讲述了如何编写一个最简单的server,但该程序只是接受到请求之后马上返回响应,实在不能更简单。在正常的开发中,应该根据不同的请求做出不同的响应。要做到上述的功能,首先要解析客户端发来的请求报文。
报文在不同的上下文情景下有不同的理解,本文所说的报文都是在HTTP上下文中描述的名词。
HTTP报文是什么
在HTTP程序中,报文就是HTTP用来搬运东西的包裹,也可以理解为程序之间传递信息时发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容和含义,后面跟着可选的数据部分。
报文的流动
HTTP使用属于流入和流出来描述报文的传递方向。HTTP报文会像合水一样流动。不管时请求报文还是响应报文,都会向下游流动,所有报文的发送者都在接受者的上游。下图展示了报文向下游流动的例子。
报文的组成
报文由三个部分组成:
- 对报文进行描述的起始行
- 包含属性的首部块
- 可选的、包含数据的主体部分
起始行和首部是由行分隔的ASCII文本。每行都以一个由两个字符(回车符--ASCII码13和换行符--ASCII码10)组成的行终止序列结束。可以写做CRLF。
尽管规范说明应该用CRLF来表示行终止,但稳健的应用程序也应该接受单个换行作为行的终止。笔者仅支持以CRLF换行的解析,因为我觉得既然有了规范,那就需要遵循,遵循相同的协议的程序才能互相通信。
实体是一个可选的数据块。与起始

