工控网中基于Linux的嵌入式HTTP服务器设计
*void prease_general_header(char*,struct*request_inf)
该函数用来解析HTTP请求报文的调用首部(General_Header)。之所以把此函数与函数prase_request_line()分开,是考虑到程序的修植性和扩展性。请求行和通用首部是请求报文中的不同部分,不不同的场合下,要求解析的信息可能存在差导师。同时,这样也能使程序结构更清楚。比如,本项目要从通用首部解析字段Keep_Alive。该字段指明一个最长的时间或最大请求数目,在此范围内可以保持TCP连接不被释放(即前文提到的HTTP1.1的持续连接特性,persistent connection)。
*void prase_request_header(char*,struct*request_inf)
void prase_entity_header(char*,struct*request_inf)
HTTP请求报文的请求头部用来说明浏览器的一些信息,实体头部则用来说明请求报文中可能存在的实体主体信息。本项目实际上并不需要使用这两个函数来获取相关信息,但考虑到程序的扩展性和移植性,此处仍然把它列出来,它们是两个空函数。
*send_status_line(int fd,struct *response_inf)
此函数用来产生一个HTTP响应报文的状态行(Status_line)。状态行包括三部分内容,即HTTP版本、状态码以及解释状态码的简单短语。这些信息预先放在结构response_inf中。
*send_general_header(int fd,struct*response_inf)
send_response_header(int fd,struct*response_inf)
send_entity_header(int fd,struct*response_inf)
这三个函数分别用来产生HTTP响应报文的通用首部、响应首部(Response_header)和实体首部。嵌入式HTTP服务器是一个瘦服务器,功能非常简单。因此HTTP响应报文的通用首部、响应首部和实体首部中的可选字段许多是不需要的,还有许多是固定不变的,例如Last_modified和Content_type字段。Last_modified字段指出资源上次被修改的时间并由接收方解释。如果接收方已有此资源的拷贝,但此拷贝比Last-Modified域所指定的要旧,那该拷贝就是过期的。由于网
页文件中含有自定义标记,具有实时性,所以此字段根本没有含有Content_type字段指出实体的媒体类型,本项目中的嵌入式HTTP服务器被设计成只支持HTML类型,因此该字段的内容总是Content_type=text/html。有关服务器和资源的所有标题域信息都被放入结构response_inf中。
*send_white_line(int fd)
此函数用于实体首部和实体之间传送一个空白行。
*void send_entity_body(int fd,char *buff_file)
此函数用来传递实体主体,实体主体实际上是一个处理后的网页文件,它被放在指针buff_file指向的缓冲区内。
*void zero_request_inf(struct*request_inf)
void zero_response_inf(struct*response_inf)
这两个函数用于结构request_inf和response_inf清零。
*void get_file(struct*request_inf,struct * response_inf,char*buff_file,void*,void*)
该函数用来处理用户HTTL请求。首先,函数会检查request_inf结构,判断用户是请求一个网页文件还是上传数据。当用户请求网页文件时,函数将根据reque
《工控网中基于Linux的嵌入式HTTP服务器设计(第4页)》