2016-05-08 1 views
2

Я недавно работал над небольшим проектом для обслуживания статических файлов. Я хочу, чтобы иметь возможность обслуживать различные типы файлов, как:Является ли декларация заголовка MIME хорошей практикой?

html, jpg, png, pdf, doc... 

Все файлы, кажется, правильно делают в разных браузерах без назначения типа MIME.

Например, если я служу изображение и объявить тип MIME я бы написать это в моем Node.js код:

response.writeHead(200, {'Content-Type': 'image/jpg'}); 
response.end(data); 

Игнорирование тип MIME будет оказывать те же самые результаты в различных браузерах:

response.writeHead(200); 
response.end(data); 

Насколько я понимаю, если в заголовке не указан тип MIME, браузер сделает все возможное, чтобы понять это.

В соответствии с HTTP specifications заголовок «Content-Type» не требуется.

Как и со всеми многочастными типами MIME, каждая часть имеет дополнительный «Content-Type», который по умолчанию текста/равнине.

Должен ли я объявлять тип MIME для каждого ответа? Зачем?

+2

Эта часть спецификации (которая, кстати, устарела rfc7578), указывает на многопрофильную кодировку с точки зрения клиента. Кажется, ваш вопрос заключается в том, должен ли сервер включать заголовок Content-Type. Которые являются неродственными предметами. –

+0

Это не имеет никакого отношения к JavaScript или Node.js. Неважно, как сервер реализован. – Bergi

ответ

2

Необходимо установить тип мим. Клиенту полезно определить тип данных, с которыми он имеет дело. Ничего общего с узлом. Это http spec.

+1

Проверьте этот SO http: // stackoverflow.com/a/20392909/4466350 добавляет подробности о спецификации. Что говорит, что клиент может попытаться угадать, поэтому он работает большую часть времени. –

4

Вы цитируете MIME RFC. Но в this context, Content-Type находится под органом RFC 7231, section 3.1.1.5, который читает (курсив мой):

Отправитель, который генерирует сообщение, содержащее корпус полезной нагрузки следует генерировать поле заголовка Content-Type в этом сообщении если не указан предполагаемый тип носителя прилагаемого представления неизвестно отправителю.

На практическом примере, если вы опустите этот заголовок, вы оставляете клиента с догадками над расширениями файлов и magic bytes. Заголовок Content-Type будет иметь приоритет над ними и сохранить работу клиента.

Соответствующая часть адресов RFC это следующим образом:

Клиентов, которые так рискуют рисунок неправильных выводов, которые могли бы разоблачить дополнительные риски безопасности (например, «повышение привилегий»). Кроме того, невозможно определить намерение отправителя путем изучения формата данных: многие форматы данных соответствуют нескольким типам носителей, которые отличаются только семантикой обработки.