Существует ли MIME-тип, который сообщает браузерам «не пытайтесь определить тип, просто отображайте как текст»?

#http #mime-types

#http #mime-типы

Вопрос:

Во время тестирования некоторого кода HTTP-сервера я заметил кое-что странное: если я вернусь Content-Type: text/plain , браузеры не будут отображать содержимое в виде обычного текста. Вместо этого они, похоже, предполагают, что сервер должен быть неправильно настроен, и вместо этого они пытаются определить тип содержимого.

Например, если я возвращаю содержимое файла PNG, но с Content-Type: text/plain :

  • FireFox и IE9 оба просматривают расширение URL. Если он заканчивается на .png , они отображают его как изображение. Если нет (например, если я возвращаю то же содержимое с URL-адреса, который заканчивается на .xyz ), мне предлагается сохранить файл.
  • Chrome и Opera просматривают содержимое файла, определяют, что это PNG, и отображают его как изображение.

Конечно, не имеет смысла возвращать PNG, как text/plain в рабочей среде; но если я проверяю, возвращает ли мой сервер правильное Content-Type значение, мешает ошибочное поведение браузеров. Плюс это просто глупо, что вызывает у меня любопытство, есть ли способ обойти это.

Есть ли способ — с другим Content-Type или дополнительным HTTP-заголовком или чем-то еще — чтобы я мог сообщить браузеру: «Покажите это как текст, нет, на самом деле, я действительно знаю, что я делаю»?

Ответ №1:

См https://datatracker.ietf.org/doc/html/draft-ietf-websec-mime-sniff-03#section-4 для контекста.

В некоторых пользовательских интерфейсах добавление в качестве пользовательского параметра, такого как

текст / обычный; imeanit=да

может помочь.

Некоторые версии IE поддерживают

X-Content-Type-Options: nosniff

см http://msdn.microsoft.com/en-us/library/gg622941(v=vs.85).aspx

Комментарии:

1. X-Content-Type-Options: nosniff работает в Chrome (v14) и IE (v9). Content-Type: text/plain; imeanit=yes работает в FireFox (v7). Комбинация получает все, кроме Opera, но поскольку, похоже, нет соглашения о том, какой спецификации следовать или как ей следовать, похоже, что это настолько близко к ответу, насколько я собираюсь получить. Спасибо!

Ответ №2:

Какие данные вы на самом деле возвращаете? Вы уверены, что он полагается на URL-адрес, или сервер игнорирует ваш запрос на изменение типа содержимого? Вы проверили заголовки, которые видит браузер? Если вы действительно отправляете png как «текст», я думаю, что браузеры поступают правильно, определяя фактический тип данных, поскольку вы, вероятно, вызываете исключения в их процедурах рендеринга текста.

Комментарии:

1. Отредактировано, чтобы объяснить, почему я уверен, что он полагается на URL. Фактическое содержимое — это необработанные байты из файла PNG. Да, я изучил заголовки (используя curl --head ).

2. Ну, я не могу сказать вам авторитетно, но я подозреваю, что ответ заключается в том, что вы не можете требовать , чтобы браузер что-либо делал. Кроме того, если вы найдете обходной путь для определенного браузера, он, вероятно, не будет работать для всех из них.