8.2 HTTP应用
在第1.4节曾简要地阐述过HTTP协议,对该节内容的理解将有助于学习本节的知识。本节主要介绍一些和HTTP处理有关的函数。这些函数主要有:
❑函数header()。
❑函数setcookie()。
8.2.1 生成一个HTTP头
服务器在将HTML文档传送至客户端之前,会先发送一些数据的说明信息到浏览器,最后发送HTML文档数据,这些说明信息被称作头标。图8-4说明了浏览器和服务器之间通信的过程,以及服务器传送给服务器头标的时间。
函数header()会将HTML文档的标头以HTTP协议发送至浏览器,告诉浏览器该如何处理这个页面。如果忘记了标头的概念,或者不清楚有哪些内容会被传送,请读者再熟悉一下第1章有关HTTP协议的介绍。该函数的语法如下所示。
header(string$str_header);
函数的参数$str_header是一个字符串,用来接收要发送的标头。事实上,这个函数还有两个可选参数,因为对初学者来说没有必要了解,这里不再赘述。
下面介绍函数header()的几个使用范例。
在PHP中,函数header()最常见的用法就是重定向。代码8-4实现将用户的访问重定向到PHP的官方网站。
代码8-4 使用函数header()重定向8-4.php
01 <?php
02 header("location:http://www.php.net");//重定向页面
03 exit;
04 ?>
【代码解析】经过第2行的重定向,你会发现打开了新的页面。
如果限制某一页面不能被用户访问,可以用代码8-5所示的程序,设置页面状态为404。
代码8-5 使用函数header()设置页面状态为“404未找到文件”8-5.php
01 <?php
02 header('HTTP/1.1 404 Not Found');//找不到网页的提示信息
03 header("status:404 Not Found");
04 ?>
【代码解析】通过浏览器访问该程序,会看到“找不到网页”和“HTTP 404-未找到”的提示,如图8-5所示。
代码8-6保证用户访问某页面时获取最新的内容,而不是读取客户端的缓存。
代码8-6 通过函数header()获取页面最新内容8-6.php
01 <?php
02 //告诉浏览器此页面的过期时间(用国际标准时间表示),只要是已经过去的日期即可
03 header("Expires:Mon,26 Jul 1970 05:00:00 GMT");
04
05 //告诉浏览器此页面的最后更新日期(用国际标准时间表示)也就是当天,目的就是强迫浏览器获取最新内容
06 header("Last-Modified:".gmdate("D,d M Y H:i:s")."GMT");
07 header("Cache-Control:no-cache,must-revalidate");//告诉浏览器不使用缓存
08
09 //与以前的服务器兼容,即兼容HTTP 1.0协议
10 header("Pragma:no-cache");
11 header("Content-type:application/file");//输出MIME类型
12 header("Content-Length:2850");//文件长度
13 header("Accept-Ranges:bytes");//接受的范围单位
14 header("Content-Disposition:attachment;filename=afilename");//默认时文件保存对话框中的文件名称
15 ?>
【代码解析】在PHP中,在向浏览器传送HTML文档之前,需要传完所有的标头。也就是说,函数header()必须在有任何实际输出之前调用,包括输出普通的HTML、空行或PHP代码。下面的代码就是错误的,因为在调用函数header()之前,已经输出了HTML标记<html>。
<html>
<?php
header('Location:http://www.example.com/');
?>