18.2.6 SHTTPD对URI的分析设计
URI是客户端请求主机网络资源的位置,对于URI的分析主要包含如下需要特别注意的部分:
资源位置的确定。请求主机的位置以“/”开始,其后为相对路径,要注意请求的路径中使用“../../../”的形式取得请求范围的扩大。资源位置的最后一个“/”之后的字符串为实际请求的文件名,需要根据此文件名判定请求资源的类型,例如请求一个常规文件、请求一个目录来获得目录下面所有文件的列表、请求CGI等。
URI资源中的“保留”和“危险”字符集。此字符集中的字符等同于它们的“% HEX HEX”编码,即对于一个以“%”开头的字符,需要进行转换后使用其真正的值。可以使用如下代码来进行转换:
#define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W')
switch (src[i])
{
case '%':
if (isxdigit(((unsigned char *) src)[i + 1]) &&
isxdigit(((unsigned char *) src)[i + 2]))
{
a = tolower(((unsigned char *)src)[i + 1]);
b = tolower(((unsigned char *)src)[i + 2]);
dst[j] = (HEXTOI(a) << 4) | HEXTOI(b);
i += 2;
}
}
如果为“%”开头的字符,则将其后面的两个字符拼接后转换成一个字符。