Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4240954
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-03-25 15:54:37

8.处理静态网页请求
     回顾第七的内容,当 parse_uri 反水0时,将转到 serve_static 函数处理,其具体实现如下:

  1. ########

  2. void serve_static(int fd, char *filename, int filesize)
  3. {
  4. #ifdef DEBUG
  5.     printf("serve static file: %s \n", filename);
  6. #endif
  7.     int srcfd;
  8.     char *srcp, filetype[MAXLINE], buf[MAXLINE];
  9.  
  10. ### 发送响应报头给客户端
### get_filetype  来得到 MIME 类型
  1.     get_filetype(filename, filetype);

#####  发送之前需要按照 HTTP 的规范发送 HTTP响应
#####  响应格式 的格式,以及相依之后跟随的响应报头和空行
  1.     sprintf(buf, "HTTP/1.0 200 OK\r\n");
  2.     sprintf(buf, "%sServer: Mini Web Server\r\n", buf);
  3.     sprintf(buf, "%sContent-length: %d\r\n", buf, filesize);
  4.     sprintf(buf, "%sContent-type: %s\r\n\r\n", buf, filetype);
  5.     write(fd, buf, strlen(buf));

  6.    
  7. ### 发送响应主体内容(response body)全客户端
  8. ### 这里将所请求的文件发送给客户端就可以了,注意:这里没有加入复杂的错误处理逻辑,如果应用到实际项目中是
  9. ### 有必要加以改进的

  10.     srcfd = open(filename, O_RDONLY, 0);
  11.     srcp = mmap(0, filesize, PROT_READ, MAP_PRIVATE, srcfd, 0);
  12.     close(srcfd);
  13.     write(fd, srcp, filesize);
  14.     munmap(srcp, filesize);
  15. }



  1. #### 从文件类型得到对应的 MIME类型

  2. void get_filetype(char *filename, char *filetype)
  3. {
  4.     if (strstr(filename, ".html"))
  5.      strcpy(filetype, "text/html");
  6.     else if (strstr(filename, ".gif"))
  7.         strcpy(filetype, "image/gif");
  8.     else if (strstr(filename, ".jpg"))
  9.         strcpy(filetype, "image/jpeg");
  10.     else
  11.         strcpy(filetype, "text/plain");
  12. }


     MIME (Multipurpose Internet Mail Extensions,多用途的网际右键扩展协议)是创建用于电子邮件交换,网络文档,及企业网和 Internet上的其他应用程序中的文件格式的规范。我们在WEB服务器中也是用这种规范。 MIME 格式包含一个 MIME 内容类型 ( "MIME type")和指示存储在这个文件中的数据的子类型,一般以类型/子类型的形式列出。

    MINIWEBSERVER 仅用来支持 HTML,GIF,JPG以及纯文本类型,因此 ge_filetype 的实现非常简单,仅仅根据文件扩展名返回对应的 MIME 类型即可。






阅读(765) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~