如何在C中生成HTTP内容类型标头?

时间:2012-02-04 01:46:43

标签: c file-io http-headers

所以我正在进行网络分配以在C中生成一个基本的HTTP / 1.0 Web服务器。我已经弄清楚了大部分内容,但其中一个要求是它正确地填充了标题中的Content-Type字段,我似乎无法自动找到任何方法。

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

在C中是否有任何方法可以自动为给定文件生成具有HTTP样式文件类型的字符串,或者我只需要制作一个大型类型列表并根据结尾将正确的值插入标题中请求的文件(.txt,.html,.png等)?

我检查的各种文件的Content-Type字段的一些示例:

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

3 个答案:

答案 0 :(得分:1)

某些系统包含一个名为/etc/mime.types的文件,其中包含一堆扩展名和MIME类型对。

请参阅the documentation for such a file

答案 1 :(得分:1)

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

答案 2 :(得分:0)

文件只是一个字节包,因此无法确定.html文件是否包含C代码。您可以委托file command,其中包含许多启发式,用于根据文件的前几个字节确定这些类型的东西(例如,脚本以#!开头),但文件仍然不是万无一失的。我建议根据文件名查找表。