header函数详解

摘要

在浏览器请求资源的过程中,虽然我们看不见其具体的执行过程,但是我们却能从其他渠道了解到与之相关的信息。从这些了解到的信息中,我们不难得出浏览器与服务器进行数据通讯的过程是按照一定规则和约定进行的。

在浏览器请求资源的过程中,虽然我们看不见其具体的执行过程,但是我们却能从其他渠道了解到与之相关的信息。从这些了解到的信息中,我们不难得出浏览器与服务器进行数据通讯的过程是按照一定规则和约定进行的。

平时生活中,大多数人仅仅只是一个使用者,因此他们无须关心、了解浏览器与服务器之间通信的相关事宜。但是,做为一名合格的开发者,这些属于基本的必备知识。

PHP中,有一个函数专门用于向客户端发送原始的HTTP报头,这个函数就是header()。虽然只是一个简单的函数,但是我们却不能轻易忽视它。

有一点我们需要特别特别特别注意:必须在任何实际的输出被发送之前调用header()函数,否则程序会无法执行。

在PHP中有两种特殊的请求头:

第一种以HTTP/开头的
它将会被用来计算出将要发送的HTTP状态码。例如在Apache服务器上用PHP脚本来处理不存在文件的请求,就会希望脚本响应正确的状态码。代码如下:

  1. <?php
  2. header('HTTP/1.0 404 Not Found');
  3. ?>

第二种特殊情况是Location:开头的

它不仅把报文发送给浏览器,而且还将返回给浏览器一个REDIRECT(302)的状态码,除非状态码已经事先被设置为了201或者3xx。

  1. <?php
  2. header('Location: http://www.xiaoxiaohan.com/');
  3. exit;
  4. ?>

这里需要注意的是,很多人以为header()函数重定向了下面的代码会不执行,实际上并非如此,所以我们务必在重定向后紧跟上exit;

了解了上面两种特殊清空,下面看看header()函数常被用来处理那些问题:

1、返回状态码

  1. <?php
  2. header('HTTP/1.0 404 Not Found');
  3. ?>

2、重定向

  1. <?php
  2. header('Location: http://www.xiaoxiaohan.com/');
  3. exit;
  4. ?>

3、强制浏览器不进行缓存

  1. <?php
  2. header('Cache-Control: no-cache, must-revalidate');
  3. header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
  4. ?>

4、提示用户保存文件

  1. <?php
  2. header('Content-type: application/pdf');
  3. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  4. readfile('original.pdf');
  5. ?>

欢迎留言补充。

shaw

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: