Headerele sunt elemente prin care browser-ul si serverul web comunica in fundal pentru a afisa o pagina web in bune conditii.
Exista 2 tipuri de headere: cele emise de browser (headere de request) si cele emise de server (headere de raspuns).
Request headers
De fiecare data cand un utilizator acceseaza o pagina web, browserul trimite catre server cantitati mici de date, sub forma request headers (sau, intr-o traducere destul de rar folosita la noi, antetelor de cerere). Aceste antete cuprind detalii despre pagina care a fost solicitata, modul de transfer a ei, precum si informatii despre capabilitatile browser-ului.
De exemplu, cand ati accesat aceasta pagina, browser-ul dvs a trimis catre server urmatoarele headere de request:
Cod: Selectaţi tot
GET /http/ HTTP/1.1
Host: php.punctsivirgula.ro
Connection: close
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ro; rv:1.9.1) Gecko/20090624 Firefox/3.5
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7
Cache-Control: no
Accept-Language: de,en;q=0.7,en-us;q=0.3
Response headers
In raspuns la request headers primite de la browsere, serverele web trimit inapoi 2 tipuri de informatie:
headere de raspuns (response headers)
continutul efectiv al paginii solicitate (continut ce poate fi construit/modificat prin intermediul PHP)
Headerele de raspuns contin informatii despre pagina solicitata (cum ar fi: daca exista sau nu, dimensiunea ei, tipul de continut, etc).
De exemplu, in urma solicitarii acestei pagini in browser, serverul nostru a trimis urmatorul raspuns:
Cod: Selectaţi tot
HTTP/1.1 200 OK
Date: Fri, 17 Jul 2009 14:54:18 GMT
Server: Apache/2.2.9 (Unix) mod_ssl/2.2.9 OpenSSL/0.9.8b PHP/5.2.6 mod_scgi/1.12
X-Powered-By: PHP/5.2.6
Set-Cookie: PHPSESSID=h8144gj13180725c2aufkrd397; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Ghid PHP pentru incepatori - headere. cookies. modificarea requestului HTTP</title>
....
</html>
La fel ca in cazul antetelor de cerere, cele de raspuns sunt trimise in mod automat de catre server, inainte de a trimite continutul si nu este nevoie ca programatorul sa intervina. Exista insa situatii cand trebuie ca anumite antete sa fie modificate. Acest lucru este posibil cu ajutorul limbajului PHP.
PHP ofera posibilitatea modificarii headerelor de raspuns prin intermediul functiei header.
Cod: Selectaţi tot
# trimiterea unui semnal (Not-Found, Status OK, etc) header( 'HTTP/1.0 404 Not Found' ); // spune browserului sa afiseze un mesaj de eroare header( 'HTTP/1.0 200 OK' ); // anunta ca pagina exista si va fi trimisa catre browser # redirectionare - "spune" browserului sa "mearga" la alta adresa header( 'Location: http://www.punctsivirgula.ro/' ); # specificarea tipului paginii ce se va afisa - in urma acestor apeluri, browser-ul va # astepta alte tipuri de continut decat pagini HTML header( 'Content-type: application/pdf' ); // browserul va astepta sa fie trimis un PDF header( 'Content-type: text/css' ); // fisier css
Important! Inainte de folosirea instructiunii header() nu trebuie sa fie afisat nimic (cu print, echo, sau scriind cod HTML). Se intampla adesea ca si un spatiu ramas la sfarsitul unui fisier inclus cu include sau require sa opreasca functia de la a functiona corect.
Aplicatie: Sa se creeze o pagina care ofera spre download un document PDF, in loc sa-l deschida in browser
Probabil ca multi dintre voi ati observat ca browserele afiseaza documentele PDF sau imaginile direct in cadrul ferestrei, iar pentru a le descarca trebuie ales in mod explicit optiunea de Save din meniul browserului. Acest comportament poate fi schimbat prin headere. Daca serverul web i-ar "spune" browserului ca ceea ce se va transmite trebuie downloadat si nu afisat atunci problema ar fi rezolvata. Sa creem asadar fisierul download.php