PHP中如何使用header()函数来设置HTTP响应头?
PHP中的header()函数是在服务器端发送HTTP响应头的一种方法。 响应头是HTTP响应的一部分,它包含了关于响应、服务器、缓存和内容的信息。 使用header()函数来设置HTTP响应头可以控制浏览器如何解释响应并影响网站的性能。本篇文章将为您介绍如何使用PHP中的header()函数来设置HTTP响应头。
一、什么是HTTP响应头?
HTTP响应头是在HTTP响应中发送的元数据。 它包含了与响应相关的信息,如响应码、服务器类型、内容类型、缓存控制等等。在HTTP响应中,响应头位于响应的 行之后,以空行为分界,例如:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Server: Apache
Cache-Control: max-age=3600
Date: Thu, 13 Feb 2020 10:40:00 GMT
二、使用PHP中的header()函数设置HTTP响应头
可以使用PHP中的header()函数来设置HTTP响应头。该函数需要在响应数据发送给浏览器之前设置好。header()函数的语法如下:
header(string $header, bool $replace = true, int $http_response_code = null): bool
header()函数有三个参数:
1. $header:需要设置的HTTP响应头信息,必须是有效的HTTP头信息。
2. $replace:指示是否替换已经设置的相同类型的头信息。如果为true,则替换以前设置的同类型头信息;如果为false,不替换,后来的同类型头信息会被忽略。默认为true。
3. $http_response_code:可选参数,用于设置HTTP状态码。如果没有定义该参数,则默认状态码为200。
示例:
<?php
header("Content-Type: text/html; charset=utf-8");
header("Expires: Wed, 14 Feb 2020 10:40:00 GMT");
header("Cache-Control: max-age=3600");
header("Last-Modified: Tue, 12 Feb 2020 10:40:00 GMT");
header("HTTP/1.1 200 OK");
echo "Hello, world!";
?>
上述示例中,header()函数定义了四个HTTP响应头信息:Content-Type、Expires、Cache-Control和Last-Modified。最后一个header()函数还设置了HTTP协议版本和状态码。下面是这些头信息的解释:
1. Content-Type:它告诉浏览器所请求的内容的类型(即MIME类型)和编码方式。
2. Expires:它规定了响应内容的过期时间,即在服务端缓存中的保存时间,到期后需要重新从服务器获取对应资源,有效减少对服务器负载的影响。
3. Cache-Control:它指示所有缓存代理是否可以缓存响应以及响应的最大时长等。
4. Last-Modified:它包含了资源的最后修改时间。
三、常见HTTP响应头信息的作用
不同的HTTP头信息对于网站性能的影响不同,下面介绍几个常见的HTTP响应头。
1. Content-Type
Content-Type头信息指定了返回的数据类型。例如,Content-Type为text/html时返回HTML内容,为image/jpeg时返回JPEG格式的图片。正确的Content-Type有助于浏览器正确解析响应内容。
2. Expires
Expires头信息指定了响应数据的过期时间。通常在服务器端设置资源的过期时间有利于减轻服务器的压力,同时可以使客户端直接从本地缓存获取页面,加速页面加载时间。
3. Cache-Control
Cache-Control头信息指定了缓存策略。它控制了客户端和中间代理缓存内容的缓存行为,比如是否缓存、多久过期、是否只有HTTPS请求才能缓存、是否公共缓存等等。
4. Pragma
Pragma头信息控制浏览器缓存,通常您不需要手动设定它,而是由服务器自动生成。常见的值有no-cache,表示不缓存页面,必须从服务器获取内容,每次请求都会重新获取。另一个值是cache,通常表示允许缓存内容。
5. Last-Modified和ETag
Last-Modified和ETag都是用于判断内容是否发生变化的信息。在服务器端设置ETag和Last-Modified会使浏览器在发送请求时加上If-Modified-Since和If-None-Match头信息,以便服务器和客户端协商是否需要获取内容。如果内容没有修改,它们会返回一个状态码为304的响应,浏览器直接从缓存中获取内容,加快网页的加载速度。
总结:
HTTP响应头是HTTP响应中的一部分,它包含了关于响应、服务器、缓存和内容的信息。 在PHP中,可以使用header()函数来设置HTTP响应头。设置HTTP响应头有两个好处:一是可以优化网页性能,二是可以帮助您实现高级的缓存策略。要注意的是,必须在发送响应数据之前设置HTTP响应头。
