Подтвердить что ты не робот

Заголовок ('Content-Type: text/plain'); нужно вообще?

Я не видел никакой разницы с или без этой информации в заголовках.

4b9b3361

Ответ 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.