← Назад к вопросам

Какой синтаксис у заголовков?

1.3 Junior🔥 152 комментариев
#API и веб-протоколы

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Синтаксис заголовков в PHP для HTTP-ответов

В PHP работа с HTTP-заголовками осуществляется через специальные функции и методы, которые позволяют управлять поведением браузера и взаимодействием с клиентом. Вот основные способы отправки заголовков:

1. Функция header()

Основной и наиболее распространённый способ отправки HTTP-заголовков:

<?php
// Базовый синтаксис
header("Header-Name: header-value");

// Конкретные примеры
header("Content-Type: application/json");
header("Location: https://example.com/new-page.php");
header("Cache-Control: no-cache, no-store, must-revalidate");
header("HTTP/1.1 404 Not Found");

Ключевые особенности функции header():

  • Должна вызываться до любого вывода в браузер
  • Чувствительна к регистру в названиях заголовков
  • Поддерживает замену существующих заголовков (по умолчанию) или добавление нескольких значений

2. Установка статус-кода ответа

PHP предоставляет несколько способов установки HTTP-статуса:

<?php
// Через функцию header()
header("HTTP/1.1 403 Forbidden");

// Альтернативный синтаксис (PHP >= 5.4)
http_response_code(404);

// Проверка текущего статус-кода
$currentCode = http_response_code();

3. Работа с уже отправленными заголовками

<?php
// Проверка, были ли уже отправлены заголовки
if (headers_sent()) {
    echo "Заголовки уже отправлены, изменить их нельзя";
}

// Получение списка всех заголовков, которые будут отправлены
$headers_list = headers_list();

// Удаление заголовка (до отправки)
header_remove("X-Powered-By");

4. Особые случаи и рекомендации

Отправка нескольких значений для одного заголовка:

<?php
// Для нескольких cookies
header("Set-Cookie: name=value; path=/; secure; httponly");
header("Set-Cookie: session_id=abc123; path=/; secure; httponly", false);

// Для других заголовков с несколькими значениями
header("X-Custom-Header: value1");
header("X-Custom-Header: value2", false); // false - не заменять, а добавлять

Работа с кодировкой и содержимым:

<?php
// Установка кодировки
header("Content-Type: text/html; charset=utf-8");

// Для JSON API
header("Content-Type: application/json; charset=utf-8");

// Для файлов на скачивание
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"report.pdf\"");
header("Content-Length: " . filesize("report.pdf"));

5. Современные подходы в PHP фреймворках

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

<?php
// Пример в Laravel
return response()
    ->json($data)
    ->header('Content-Type', 'application/json')
    ->header('Cache-Control', 'no-store');

// Пример в Symfony
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Cache-Control', 'no-cache');

6. Безопасность и лучшие практики

  • Заголовки безопасности:
<?php
header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: DENY");
header("X-XSS-Protection: 1; mode=block");
header("Referrer-Policy: no-referrer-when-downgrade");
  • Важно помнить: функция header() должна вызываться до любого вывода, включая пробелы и переводы строк вне PHP-тегов.

7. Отладка и проверка заголовков

<?php
// Логирование заголовков для отладки
ob_start();
// ... ваш код ...
$output = ob_get_contents();
ob_end_clean();

// Проверка отправленных заголовков
foreach (headers_list() as $header) {
    error_log("Sent header: " . $header);
}

Итоговые рекомендации:

  1. Всегда устанавливайте правильный Content-Type
  2. Используйте соответствующие статус-коды HTTP
  3. Добавляйте заголовки безопасности
  4. Проверяйте, не отправлены ли уже заголовки с помощью headers_sent()
  5. В современных приложениях используйте возможности фреймворков для работы с заголовками

Правильная работа с HTTP-заголовками критически важна для безопасности, производительности и корректной работы веб-приложений на PHP.

Какой синтаксис у заголовков? | PrepBro