Как создать заголовок HTTP-типа в C? - PullRequest
2 голосов
/ 04 февраля 2012

Итак, я работаю над сетевым заданием для создания базового веб-сервера HTTP / 1.0 на языке C. Большинство из них выяснено, но одно из требований заключается в том, чтобы оно правильно заполняло поле 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 ]

1 голос
/ 04 февраля 2012

Некоторые системы содержат файл с именем /etc/mime.types, который содержит набор расширений и пар типов MIME.

См. документацию для такого файла .

1 голос
/ 04 февраля 2012

Вероятно, лучший подход - это таблица поиска, основанная на расширениях. Идея о том, что с данным файлом связан только один «тип», просто ошибочна. По крайней мере, использование расширений дает вам немного возможностей контролировать интерпретацию содержимого файла. Например, если вы хотите показать пример того, как работает html-источник, вы можете переименовать example.html в example.html.txt, и клиент будет рассматривать его как text/plain. Если вы просто использовали эвристику, чтобы определить, что содержимое файла «html», вы застряли.

0 голосов
/ 04 февраля 2012

Файл представляет собой пакет байтов, поэтому невозможно точно узнать, что, например, файл .html не содержит кода C.Вы можете делегировать файловую команду , которая содержит много эвристик для определения такого рода вещей на основе первых нескольких байтов файла (например, сценарии начинаются с # !,), но файл все еще нене защищен от ошибок.Я бы порекомендовал таблицу поиска на основе имен файлов.

...