Я еще не видел никакой разницы с этой головной информацией или без нее.
Определите «необходимый».
Это необходимо, если вы хотите, чтобы браузер знал, что такое тип файла. PHP автоматически устанавливает заголовок Content-Type
в text/html
если вы не переопределяете его, поэтому ваш браузер обрабатывает его как HTML-файл, который не содержит HTML. Если на вашем выходе содержится какой-либо HTML-код, вы увидите очень разные результаты. Если вы должны были отправить:
<b><i>test</i></b>
Content-Type: text/html
будет выводиться:
контрольная работа
тогда как Content-Type: text/plain
будет выводить:
<b><i>test</i></b>
Версия TLDR: если вы действительно выводите текст, это не имеет большого значения, но это неправильно.
PHP использует Content-Type «text / html» по умолчанию, что очень похоже на «text / plain» – и это объясняет, почему вы не видите различий. text / plain необходим, если вы хотите вывести текст как есть (включая <> – символы). Примеры:
header("Content-Type: text/plain"); echo "<b>hello world</b>"; // Output: <b>hello world</b> header("Content-Type: text/html"); echo "<b>hello world</b>"; // Output: hello world
Настройка заголовка Content-Type повлияет на то, как веб-браузер обрабатывает ваш контент. Когда большинство основных веб-браузеров сталкиваются с Content-Type текста / plain, они будут отображать исходный текст в окне браузера (в отличие от источника, отображаемого в HTML). Это разница между
<b>foo</b>
или
Foo
Кроме того, при использовании объекта XMLHttpRequest
заголовок Content-Type будет влиять на то, как браузер выполняет сериализацию возвращенных результатов. До захвата фреймов AJAX, таких как jQuery и Prototype, общей проблемой с ответами AJAX был набор Content-Type для text / html вместо text / xml. Аналогичные проблемы могут возникнуть, если Content-Type был текстовым / равным.
Очень важно, чтобы вы сообщали браузеру, какой тип данных вы его отправляете. Разница должна быть очевидной. Попробуйте просмотреть выходные данные следующего файла PHP в своем браузере;
<?php header('Content-Type:text/html'); ?> <p>Hello</p>
Ты увидишь:
Здравствуйте
(обратите внимание, что вы получите те же результаты, если в этом случае вы пропустите строку заголовка – text / html – по умолчанию php)
Измените его на текстовый / обычный
<?php header('Content-Type:text/plain'); ?> <p>Hello</p>
Ты увидишь:
<Р> Hello </ p>
Почему это имеет значение? Если в php-скрипте есть что-то вроде следующего: например, используется запрос ajax:
<?php header('Content-Type:text/html'); print "Your name is " . $_GET['name']
Кто-то может поместить ссылку на URL-адрес, например http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3E, на их сайт, и если пользователь нажмет на него, они выставят всю свою информацию на вашем сайте тому, кто разместил ссылку. Если вы обслуживаете файл как текстовый / обычный, вы в безопасности.
Обратите внимание, что это глупый пример, скорее всего, тег плохих скриптов будет добавлен злоумышленником в поле в базе данных или с помощью отправки формы.
Предположим, вы хотите ответить на запрос с статусом HTTP 204: No Content HTTP. Firefox будет жаловаться на «элемент не найден» в консоли браузера. Это ошибка в Firefox, о которой сообщалось, но никогда не исправлялась в течение нескольких лет. Отправляя заголовок Content-type: text / plain, вы можете предотвратить эту ошибку в Firefox.
нет, это не так, вот пример для поддержки моего ответа —-> очевидная разница видна, когда вы переходите на сжатие HTTP, что позволяет вам сжимать данные во время путешествия с сервера на клиент и тип эти данные автоматически становятся «gzip», который сообщает браузеру, что bowser получил заархивированные данные, и он должен его повышать , это пример, когда Type действительно имеет значение в Bowser.