thttpd源码分析-----http协议头部检测
来源:互联网 发布:哪里的mac pro最便宜 编辑:程序博客网 时间:2024/05/22 05:32
在源码中,用于http 头部检测的是 httpd_got_request 函数
该函数并没有检测头部的内容,只是检测头部的格式而已,最明显的格式检测就是 \r\n ,空格,tab符 ,即http协议中,头部的每一行都用 \r\n 结尾,在行中,每一词用空格或tab符分开 ,说明更简单一些,就是检查请求行是不是有三个words,头部结束是不是以空行结束 。仅此而已
下面是用的几种状态来检测格式是否合法的
/* Checks hc->read_buf to see whether a complete request has been read so far; ** either the first line has two words (an HTTP/0.9 request), or the first ** line has three words and there's a blank line present. ** ** hc->read_idx is how much has been read in; hc->checked_idx is how much we ** have checked so far; and hc->checked_state is the current state of the ** finite state machine. */int httpd_got_request(httpd_conn* hc) {char c;for (; hc->checked_idx < hc->read_idx; ++hc->checked_idx) {c = hc->read_buf[hc->checked_idx];switch (hc->checked_state) {case CHST_FIRSTWORD://the first word "GET"switch (c) {case ' ':case '\t':hc->checked_state = CHST_FIRSTWS;break;case '\012':case '\015':hc->checked_state = CHST_BOGUS;return GR_BAD_REQUEST;}break;case CHST_FIRSTWS:switch (c) {case ' ':case '\t':break;case '\012':case '\015':hc->checked_state = CHST_BOGUS;return GR_BAD_REQUEST;default:hc->checked_state = CHST_SECONDWORD;break;}break;case CHST_SECONDWORD:switch (c) {case ' ':case '\t':hc->checked_state = CHST_SECONDWS;break;case '\012':case '\015':/* The first line has only two words - an HTTP/0.9 request. */return GR_GOT_REQUEST;}break;case CHST_SECONDWS:switch (c) {case ' ':case '\t':break;case '\012':case '\015':hc->checked_state = CHST_BOGUS;return GR_BAD_REQUEST;default:hc->checked_state = CHST_THIRDWORD;break;}break;case CHST_THIRDWORD:switch (c) {case ' ':case '\t':hc->checked_state = CHST_THIRDWS;break;case '\012':hc->checked_state = CHST_LF;break;case '\015':hc->checked_state = CHST_CR;break;}break;case CHST_THIRDWS:switch (c) {case ' ':case '\t':break;case '\012':hc->checked_state = CHST_LF;break;case '\015':hc->checked_state = CHST_CR;break;default:hc->checked_state = CHST_BOGUS;return GR_BAD_REQUEST;}break;case CHST_LINE:switch (c) {case '\012':hc->checked_state = CHST_LF;break;case '\015':hc->checked_state = CHST_CR;break;}break;case CHST_LF:switch (c) {case '\012':/* Two newlines in a row - a blank line - end of request. */return GR_GOT_REQUEST;case '\015':hc->checked_state = CHST_CR;break;default:hc->checked_state = CHST_LINE;break;}break;case CHST_CR:switch (c) {case '\012':hc->checked_state = CHST_CRLF;break;case '\015':/* Two returns in a row - end of request. */return GR_GOT_REQUEST;default:hc->checked_state = CHST_LINE;break;}break;case CHST_CRLF:switch (c) {case '\012':/* Two newlines in a row - end of request. */return GR_GOT_REQUEST;case '\015':hc->checked_state = CHST_CRLFCR;break;default:hc->checked_state = CHST_LINE;break;}break;case CHST_CRLFCR:switch (c) {case '\012':case '\015':/* Two CRLFs or two CRs in a row - end of request. */return GR_GOT_REQUEST;default:hc->checked_state = CHST_LINE;break;}break;case CHST_BOGUS:return GR_BAD_REQUEST;}}return GR_NO_REQUEST;}
- thttpd源码分析-----http协议头部检测
- HTTP 断点续传协议头部分析
- thttpd源码分析
- thttpd源码分析
- thttpd源码分析
- thttpd源码分析
- thttpd源码分析
- JavaWeb——HTTP协议头部分析
- [转]HTTP 断点续传协议头部分析
- thttpd 2.25b源码分析
- thttpd 2.25b源码分析
- thttpd 2.25b源码分析
- http协议头部解析
- HTTP的头部协议
- Http协议头部信息
- Http协议头部信息
- HTTP协议头部详解
- http协议基础头部
- Java对象的序列化和反序列化实践
- C++中调用R Language的类库
- html实现面板效果
- 中语言超酷特性 之 --- 数组
- Windows 平台10.2.0.1 升级到10.2.0.4 报msvcr71.dll错误解决
- thttpd源码分析-----http协议头部检测
- iOS Framework那些事儿
- 安装slurm与重启slurm
- Struts2中的OGNL表达式
- js实现页面跳转的几种方式
- 数据库字段类型对应C#字段类型
- css position了解
- javaIO流相关
- modbusCRC16的手工计算