Функция header в php

Заголовки на скачивание файла коротко описаны здесь — https://blog.bullgare.com/2010/01/%d0%b7%d0%b0%d0%b3%d0%be%d0%bb%d0%be%d0%b2%d0%ba%d0%b8-%d0%bd%d0%b0-%d1%81%d0%ba%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%b0/

Функция header в php используется для посылки HTTP-заголовков (почитать на w3.org).

$string:
сам заголовок. Бывает двух типов. Первый начинается с «HTTP/» (header(«HTTP/1.0 404 Not Found»);). Второй начинается не с «HTTP/». Состоит из двух частей «имя парметра: значение» (например, «Location: http://www.example.com/» или «Content-type: application/pdf»).
Второй параметр булевого типа. Если true (по умолчанию), то заголовок замещает предыдущий с таким же именем параметра, если false, то передаётся несколько параметров одного типа:

Третий параметр, $http_response_code, можно использовать для передачи HTTP-заголовков ответа (200, 404 и т.п.):

Функция header используется для простановки заголовков «вручную», для кеширования, для внешнего перенаправления, для выставления правильного mime-типа и кодировки.

Пример простановки заголовков «вручную»:

Пример внешнего перенаправления:

Пример реализации скачивания файлов по расширению (полезен перечислением mime-типов):

*Mime-типы описываются здесь.

Заголовок header(«Content-Transfer-Encoding: binary»); очень важен для того, чтобы заставить браузер скачивать файл, а не отображать текстовое содержимое.

Пример установки использумой кодировки:

Самая интересная часть: кеширование (w3.org).
Для начала надо заметить, что HTTP/1.0 моежт не поддерживать основную директиву (Cache-Control), поэтому в этом случае нужно использовать заголовок Pragma: no-cache. Хотя уже давно все поддерживают 1.1, поэтому особого смысла это делать нет.
Заголовок Cache-Control может использоваться как для запроса, так и для ответа. Нас интересует только ответ.
Синтаксис следующий:
«Cache-Control: значение».
Значения:

Заголовок Expires используется для задания даты, при которой кеш считается просроченным
(Expires: Thu, 01 Dec 1994 16:00:00 GMT), можно задавать дату в прошлом (значит, кеш уже просрочен) или в будущем. При этом если используется заголовок Cache-Control: max-age=значение, то он переопределяет заголовок Expires.
Заголовок ETag используется для создания «тегов», по сравнению которых можно определить, актуален ли кеш в браузере/на прокси-сервере.
Использование:
ETag: уникальный тег.
Обычно для создания тегов советуют использовать что-то вроде:

Думаю, для кеширования картинок вполне достаточно этого:

Но только делать такие вещи в том же Nginx (возможно там такой механизм уже есть).
Для запрета кеширования обычно используется связка

UPD:

А вообще, если интересно, вот очень большой список майм-типов:
https://github.com/broofa/node-mime/blob/master/types/mime.types

https://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1

5 Responses so far.

  1. марлен:
    спасибо! что детально и подробно!!!
  2. ator:
    А можно добавить SWF файлы в скрипт?
    • bullgare:
      для flash нужен заголовок
      header(«Content-Type: application/x-shockwave-flash»);
      т.е.
      в скрипте после строки
      case «avi»: $ctype=»video/x-msvideo»; break;
      нужно добавить
      case «swf»: $ctype=»application/x-shockwave-flash»; break;
  3. а как добавить rar-архивы???
  4. bullgare:
    case ‘rar’: $ctype = ‘application/x-rar-compressed, application/octet-stream’; break;
    case ‘zip’: $ctype = ‘application/zip, application/octet-stream’; break;

LEAVE A COMMENT