HTTP 请求的读取和分析
主状态机的状态
- 正在分析请求行 CHEACK_STATE_REQUESTLINE -> parse_requestline
- 正在分析头部字段 CHECK_STATE_HEADER -> parse_headers
从状态机的三种可能状态,即行的读取状态
- 读取道一个完整的行 LINE_OK
- 行出错 LINE_BAD
- 数据尚且不完整 LINE_OPEN
服务器HTTP 请求结果
- NO_REQUEST 表示请求不完整,还需要继续读取客户数据
- GET_REQUEST 表示获得了一个完整的客户请求
- BAD_REQUEST 表示客户请求有语法错误
- FORBIDDEN_REQUEST 表示客户对资源没有足够的访问权限
- INTERNAL_ERROR 表示服务器内部错误
- CLOSE_CONNECTION 表示客户端已经关闭连接了
LINE_STATUS parse_line (char* buffer, int& checked_index, int& read_line)
用于解析出一行的内容
checked_index 指向 buffer 中当前正在分析的字节,read_index 指向 buffer 中客户数据的尾部的下一个字节, buffer 中 0 ~ checked_index 字节都分析完毕,第 checked_index ~ read_index - 1,需要逐个分析
parse_line ->ok 的,才能开始分析请求行以及头部字段
HTTP_CODE parse_requestline (char* temp, CHECK_STATE& checkstate)
用于分析请求行
HTTP_CODE parse_headers(char* temp)
分析头部字段
HTTP_CODE prase_content(char* buffer, int& checked_index, CHECK_STATE& checkstate, int& read_index, int& start_line)
HTTP 请求的入口函数