Я не видел никакой разницы с или без этой информации в заголовках.
Заголовок ('Content-Type: text/plain'); нужно вообще?
Ответ 1
Определите "необходимо".
Это необходимо, если вы хотите, чтобы браузер знал, какой тип файла. 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>
Версия TL;DR: Если вы действительно выводите только текст, это не имеет значения, но это НЕПРАВИЛЬНО.
Ответ 2
PHP по умолчанию использует Content-Type "text/html" - который очень похож на "text/plain" - и это объясняет, почему вы не видите никаких отличий. text/plain необходим, если вы хотите вывести текст как есть (включая <> -symbols). Примеры:
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
Ответ 3
Установка заголовка Content-Type повлияет на то, как веб-браузер обрабатывает ваш контент. Когда большинство основных веб-браузеров сталкиваются с типом содержимого text/plain, они отображают исходный текстовый источник в окне браузера (в отличие от источника, отображаемого в HTML). Это разница между видением
<b>foo</b>
или же
foo
Кроме того, при использовании объекта XMLHttpRequest
ваш заголовок Content-Type будет влиять на то, как браузер сериализует возвращаемые результаты. До принятия AJAX-фреймворков, таких как jQuery и Prototype, распространенной проблемой с ответами AJAX был Content-Type, установленный в text/html вместо text/xml. Подобные проблемы, вероятно, возникли бы, если бы Content-Type был text/plain.
Ответ 4
Очень важно сообщить браузеру, какой тип данных вы отправляете. Разница должна быть очевидной. Попробуйте просмотреть вывод следующего файла PHP в вашем браузере;
<?php
header('Content-Type:text/html');
?>
<p>Hello</p>
Ты увидишь:
hello
(обратите внимание, что вы получите те же результаты, если пропустите строку заголовка в этом случае - text/html по умолчанию php)
Измените его на text/plain
<?php
header('Content-Type:text/plain');
?>
<p>Hello</p>
Ты увидишь:
<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, на свои сайт, и если пользователь щелкает по нему, они предоставляют всю свою информацию на вашем сайте любому, кто разместит ссылку. Если вы используете файл как text/plain, вы в безопасности.
Обратите внимание, что это глупый пример, более вероятно, что злоумышленник добавит неверный тег в поле в базе данных или с помощью отправки формы.
Ответ 5
Допустим, вы хотите ответить на запрос со статусом HTTP 204: Нет содержимого. Firefox будет жаловаться, что "элемент не найден" в консоли браузера. Это ошибка в Firefox, о которой сообщалось, но она не исправлялась в течение нескольких лет. Отправив заголовок "Content-type: text/plain", вы можете предотвратить эту ошибку в Firefox.
Ответ 6
нет, это не так, вот пример для поддержки моего ответа → четкая разница видна, когда вы переходите на сжатие HTTP, которое позволяет сжимать данные во время перемещения с сервера на клиент и тип эти данные автоматически становятся "gzip", который сообщает браузеру, что bowser получил заархивированные данные, и он должен их распаковать, это пример, где Type действительно важен для Bowser.