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

Что такое заголовок PHP?

Мне интересно, какие заголовки PHP есть. Я использую PHP строго для завершения HTML, и я думал, что мне нужно отправить текст/html-заголовок, когда вывод был текстовым, а затем заголовок image/jpeg из отдельного script, который использовался как источник в теге изображения, но затем кто-то предложил мне забрать заголовки, потому что они ничего не сделали.

Я сделал, и все было так же, как и раньше. Это заставило меня задуматься: что такое заголовки? Когда они используются? (как с точки зрения HTML, так и с некоторой (?) другой перспективы) И почему я мог удалить мою?

4b9b3361

Ответ 1

Есть ли заголовок DEFAULT? Если я просто отправлю некоторый PHP в браузер без указания заголовка.. какой заголовок будет применяться к нему?

Существует множество разных HTTP-заголовков, которые означают разные вещи. PHP предоставит вам значения по умолчанию для важных, если вы не установите их самостоятельно.

Я думаю, что заголовок, о котором вы говорите, это Content-Type. Это сообщает браузеру, какой файл вы его отправляете. Если вы скажете text/html, он попытается отобразить то, что вы даете ему как веб-страницу. Если вы скажете application/pdf, он попытается отобразить или загрузить его как файл PDF.

PHP по умолчанию отправляет Content-Type: text/html. Если это все, что вам нужно, вам не нужно называть header('Content-Type: ...'); вообще. Однако, если вы используете любые символы Unicode, отличные от ASCII, вы можете установить Content-Type на text/html;charset=something, где something - это кодировка, которую вы используете для них (часто utf-8). В противном случае браузеру придется угадать и может ошибиться. Общеизвестный тег <meta http-equiv="Content-Type" content="text/html;charset=something"/> - это альтернативный способ сделать то же самое; если вы хотите быть в полной безопасности, вы можете использовать оба.

Если вы показываете изображение JPEG как text/html, это будет происходить, если вы будете следовать "кому-то" сомнительным советам, удалив вызов header(), затем перейдя по URL-адресу изображения в браузере, вы попытаетесь отобразить двоичное изображение как HTML, что даст вам большую старую нагрузку мусора на экране. Это не очень хорошо, действительно.

Однако во многих браузерах такой сломанный JPEG будет, как правило, работать, когда вы указываете на него тег <img src>. Это связано с тем, что, когда вы используете <img>, браузер знает, что он будет получать изображение, и игнорирует вас, когда вы говорите это на самом деле HTML. Затем он должен "обнюхать содержимое файла, чтобы увидеть, похоже ли он на JPEG, GIF, PNG или какой-либо другой вид изображения, о котором он знает, поэтому он знает, как его отображать. Браузеры сделали это, потому что там так много плохо написанных сайтов, которые забывают отправить заголовок. Boo!

Итак, отправляйте header('Content-Type: image/jpeg') при написании файла JPEG или любого другого типа, отличного от HTML. Для страниц HTML вы можете часто уйти без него.

Ответ 2

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

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

Поэтому папа начинает медленно с мумией, объясняя ей, какие данные он собирается отправить (mime/type), на каком языке он собирается говорить (charset) или какую защиту он собирается использовать (статус код).

И заголовок PHP - это игрушка, которая поможет вам сделать это со слоном. Err...

Ответ 3

Заголовки не специфичны для браузеров, это часть протокола HTTP.
 Запрос на страницу (или любой другой ресурс, такой как изображения) заставит клиента (например, интернет-браузер) отправить заголовок запроса. Например, это может содержать заголовок для языка (Accept-Language).

Первая строка HTTP-запроса находится в формате METHOD RESOURCE HTTP/VERSION. Пример: GET /resource HTTP/1.0.
Для HTTP/1.1 требуется заголовок Host. Пример запроса HTTP/1.1:

GET / HTTP/1.1
Host: example.com

Сервер отвечает хотя бы кодом состояния: HTTP/1.1 200 OK
Большинство серверов отправят дополнительные заголовки. Общие заголовки: Content-Type, Date, Server и Content-Length.

Это пример запроса (необработанные данные):

$ nc example.com 80
GET / HTTP/1.0

HTTP/1.1 200 OK
Date: Sat, 11 Sep 2010 19:12:13 GMT
Server: Apache
Last-Modified: Fri, 30 Jul 2010 15:30:18 GMT
ETag: "573c1-254-48c9c87349680"
Accept-Ranges: bytes
Content-Length: 596
Connection: close
Content-Type: text/html; charset=UTF-8

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
  <META http-equiv="Content-Type" content="text/html; charset=utf-8">
  <TITLE>Example Web Page</TITLE>
</HEAD> 
<body>  
<p>You have reached this web page by typing &quot;example.com&quot;,
&quot;example.net&quot;,&quot;example.org&quot
  or &quot;example.edu&quot; into your web browser.</p>
<p>These domain names are reserved for use in documentation and are not available 
  for registration. See <a href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC 
  2606</a>, Section 3.</p>
</BODY>
</HTML>

Это для клиента (интернет-браузера), чтобы анализировать заголовок или нет. Все современные интернет-браузеры анализируют заголовок Content-Type и используют его для определения способа отображения ресурса (это HTML-страница, изображение, текстовый файл или что-то еще?). Заголовок Server игнорируется браузерами, серверы используют его для идентификации себя. Но некоторые искатели могут использовать его для статистики.

Цитата из HTTP-спецификация:

Несколько полей заголовка сообщения с одно и то же имя поля МОЖЕТ присутствовать в сообщение тогда и только тогда, когда весь значение поля для этого поля заголовка определяется как список, разделенный запятыми [то есть, # (значения)]. Он ДОЛЖЕН быть возможным объединить несколько полей заголовка в одно "имя-поля: значение поля" пара, не меняя семантики сообщения, добавляя каждый последующее значение поля для первого, каждая из которых разделена запятой.

Это означает, что несколько полей Content-Type недопустимы, а поведение undefined (хотя обычно используется последний определенный).

Эта статья в Википедии содержит список заголовков с описанием.

Ответ 4

Заголовки - это не php-вещь, а HTTP-вещь (способ передачи данных через Интернет).

Функция header() в php позволяет вам устанавливать эти заголовки в соответствии с использованием вашего кода, поэтому, если ваш код генерирует jpg, а не, как обычно, текст (например, html или javascript, который затем интерпретируется пользовательский браузер) вы устанавливаете заголовок для соответствия image/jpeg. Теперь вы можете использовать этот script в другом месте, как если бы это было где статическое изображение, например, в:

<img src="static.jpg"/>

Теперь, если вы хотите создать миниатюру изображения и хотите получить доступ к этому динамически, вы пишете php script, который возвращает jpeg, и вы можете использовать его следующим образом:

<img src="thumb.php?s=64&name=static.jpg"/>"

Документ thumb.php будет генерировать большой палец 64x64 с изображения static.jpg(используя HTTP-заголовок Content-Type: image/jpeg.

Конечно, это только одно из многих способов использования функции header(), для дополнительной информации, смотрите в википедии: Протокол передачи гипертекста, Список полей заголовка HTTP, или если вы достаточно храбры, в rfc.

Ответ 5

Предполагая, что вы имеете в виду функцию header().

Это способ добавления/изменения заголовков HTTP, которые отправляются в браузер.

Вам может потребоваться найти список этих заголовков в Спецификации HTTP.

В качестве примера можно было бы создать XML-канал XML, поэтому вам потребуется изменить Content-Type на "text/xml" вместо "text/html" (по умолчанию).

Ответ 6

Заголовки

имеют инструкции для браузера, чтобы они отображали контент определенным образом. Например, если указать язык страницы /char, который будет использоваться, или сообщить браузеру, что данные, подлежащие выводу, являются необработанными данными изображения, поэтому обрабатывайте их как изображение (в отличие от обычного текста), или вы можете делать как заголовок ( "Location: somepage.html" ), чтобы переадресовать браузер на другую страницу. В основном много вещей (а затем и некоторых), которые вы найдете в своих обычных тегах <head>...</head>.

Ответ 7

Заголовки HTTP-запроса/ответа (в ответе вашего случая) - это метаданные, которые отправляются вместе с ответом (точнее, перед данными).

Он может содержать информацию, такую ​​как директивы кэширования, тип и размер данных, дату последней модификации и т.д. Вы можете увидеть список HTTP-заголовков здесь.

Ответ 8

Следует различать заголовочные заголовки (php, действующие как страница веб-сервера) и исходящие заголовки (php, действующий как веб-клиент, используя такие вещи, как библиотека cURL).

Заголовки - это всего лишь еще одна сумка пар имя-значение, которая проходит через провод с каждой транзакцией HTTP-запроса. Тело - это... материал, который сервер отправляет обратно, а также ответный заголовок, отправленный сервером клиенту.

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

headers() используется для установки пар Name-Value для ответного заголовка, тогда как getallheaders() будет использоваться для извлечения заголовков запросов, отправленных на страницу php-сервера.