LINUX.ORG.RU

libmagic. text/plain вместо text/css, text/javascript

 , ,


0

1

Пишу вебморду для одного проекта. Использую GNU libmicrohttpd в качестве http демона и libmagic, для определения Content-Type. При работе с css и javascript файлами libmagic выдает text/plain, что не особо нравится браузерам.

К примеру chromium выдает warning и не исполняет скрипты:

Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://localhost:8000/jquery-ui.css".
Resource interpreted as Script but transferred with MIME type text/plain: "http://localhost:8000/jquery.timers.js".

Пример:

alex@alex-laptop ~ $ nc localhost 8000
GET /ui.css HTTP/1.1


HTTP/1.1 200 OK
Connection: close
Content-Length: 699
Content-Type: text/plain; charset=us-ascii
Date: Wed, 19 Sep 2012 11:41:48 GMT

...

Собственно вопрос, как это можно профиксить?



Последнее исправление: CYB3R (всего исправлений: 1)

Уважаемый, по моему вы путаете mime с контентом файла. Чем по вашему js или css файл не текстовый? Я думаю libmagic не правильный выбор

jamy
()

libmagic читает «magic number» в заголовке и определяет тип, сверяя его со значениями в базе данных. для css и js файлов ставь Content-Type, например, по расширению.

so_much_light
()
Ответ на: комментарий от jamy

Не путаю. Один из режимов работы libmagic - выдача mime типа/кодировки содержимого файла.

js и css вполне себе текстовые файлы, но text/plain не достаточно конкретизированный результат. Вопрос в том, как изменить поведение libmagic. В остальных случаях результат работы библиотеки меня удовлетворяет.

alex_ac
() автор топика
Ответ на: комментарий от so_much_light

Это несколько пахнет велосипедизмом. Хочется по максимуму упростить код для пересылки статики, и писать только реализацию http REST API.

alex_ac
() автор топика
Ответ на: комментарий от alex_ac

Если libmagic выдает text/plain, то тогда выполняешь примерно такой свитч:

  • case файл *.css то заменить plain на css
  • case файл *.js то заменить plain на javascript
  • и т.д.
  • default оставить plain на месте
jamy
()
Ответ на: комментарий от alex_ac

Велосипед это что-то, что ты пишешь. Обычно сервер раздаёт css/js файлам сам нужный тип по расширению. css и js и есть text/plain, libmagic не врёт. Но text/plain это, если хочешь, базовый тип. В него что только не входит.

Deleted
()
Ответ на: комментарий от trashymichael

Да, действительно перепутал (один из скриптов делал запрос к API до исполнения $(document).ready и получив 404 вылетал с ошибкой. Поэтому не отрабатывал $(document).ready и страница выглядела так, будто скрипты не исполнялись вовсе.

alex_ac
() автор топика

В общем сделал следующую вещь:

В директорию с файлами кинул файл properties.lua, в котором создал таблицу в которой относительному пути файла сопоставляется его Content-Type, добавил к ней метатаблицу и __index функцию, которая возвращает Content-Type по расширению, если файл не найден в самой таблице (Наследие тех дней, когда http демон в составе проекта был написан на lua). Если получить Content-Type не удалось, то используется libmagic.

Спасибо всем.

alex_ac
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.