2012-02-04 5 views
2

私はCで基本的なHTTP/1.0 Webサーバーを生成するためのネットワーク割り当てに取り組んでいます。そのほとんどはわかっていましたが、要件の1つはヘッダーのContent-Typeフィールドが正しく設定され、私はこれを自動的に行う方法を見つけることができないようです。CでHTTPコンテンツタイプヘッダーを生成する方法は?

私はすでにファイルサイズを取得するために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
+0

* nixベースのシステムをお使いの場合は、既知のタイプのリストについては '/ etc/mime.types'を、http://svn.apache.org/repos/asf/httpd/httpd/trunk/docsを参照してください。 /conf/mime.types – drew010

答えて

1

システムによっては、一連の拡張子とMIMEタイプのペアを含む/etc/mime.typesというファイルが含まれています。

the documentation for such a fileを参照してください。

0

ファイルは、唯一のバッグですバイトであるため、.htmlファイルが確実にわかる方法はありません例えば、Cコードを含んでいません。 file commandに委任することができます。これには、ファイルの最初の数バイト(スクリプトは#!などで始まります)に基づいてこれらの種類のものを判断するためのヒューリスティックスが多数含まれていますが、ファイルはまだ完全ではありません。私はファイル名に基づいてルックアップテーブルをお勧めします。

1

おそらく最も良いアプローチは、拡張機能に基づくルックアップテーブルです。与えられたファイルにそれに関連する単一の "型"があるという考えは間違っています。少なくとも拡張機能を使用すると、ファイルの内容をどのように解釈するかを制御する力が少し必要になります。たとえば、htmlソースの動作例を表示する場合は、example.htmlの名前をexample.html.txtに変更し、クライアントにtext/plainとして扱わせることができます。ファイルの内容が "html"であると判断するためにヒューリスティックを使用したばかりの場合は、固執するでしょう。

関連する問題