2012-02-04 46 views
2

因此,我正在开发一个网络任务,用C语言生成一个基本的HTTP/1.0 Web服务器。我大部分知道了,但其中一个要求是,它正确地填充了标题中的Content-Type字段,我似乎无法找到任何方法来自动执行此操作。如何在C中生成HTTP内容类型标题?

我已经使用fstat()获取文件大小以及上次修改时间,并且我注意到它还包含一个“st_objtype”字段,但经过一些研究后,它看起来像是AS/400对象类型(这显然不是我需要的)和stat()& lstat()看起来和fstat()基本上是一样的。

有没有什么办法在C自动生成一个给定文件的HTTP风格的文件类型的字符串,或者我只是需要做一个大的类型列表,并根据请求的文件结尾(.txt,.html,.png等)?

各种文件的内容类型字段中的一些例子我检查:

  • Content-Type: text/html; charset=ISO-8859-1
  • Content-Type: image/png
  • Content-Type: application/x-gzip
  • Content-Type: application/pdf
+0

如果您有一个基于* nix的系统,请参阅'/ etc/mime.types'获取已知类型的列表,或http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs /conf/mime.types – drew010 2012-02-04 01:56:09

回答

0

的文件只是一袋字节,因此无法确切知道.html文件例如,不包含C代码。您可以委托到file command,其中包含许多基于文件的前几个字节(例如,以#!开头的脚本)来确定这些类型的启发式方法,但文件仍然不够安全。我会建议基于文件名的查找表。

1

可能最好的方法是基于扩展名的查找表。给定文件只有一个“类型”关联的想法是错误的。至少使用扩展名可以让您控制文件内容的解释方式。例如,如果您想展示HTML源代码的工作原理,可以将example.html重命名为example.html.txt,然后让客户端将其视为text/plain。如果您只是使用启发式来确定文件内容“是html”,那么您会被卡住。