注册 登录

清河洛

PHP中常用的head()函数

qingheluo2016-12-16清河洛255
PHP中header()函数的使用header()函数被用来发送自定义的HTTP报文header()必须在任何实际输出之前调用一、返回一个自定义的状态码header('HTTP/1.1 200 OK'); header('HTTP/1.1 404 Not Found'); header('HTTP/1.1 301 Moved Permanently'); header('HTTP/1.1 302 Moved Temporarily'); 二、页面跳转header('Location: URL');不仅把报文发...

PHP中header()函数的使用

header()函数被用来发送自定义的HTTP报文

header()必须在任何实际输出之前调用

一、返回一个自定义的状态码

header('HTTP/1.1 200 OK');
header('HTTP/1.1 404 Not Found');
header('HTTP/1.1 301 Moved Permanently');
header('HTTP/1.1 302 Moved Temporarily');

二、页面跳转

header('Location: URL');

不仅把报文发送给浏览器,还将返回一个重定向(302)的状态码,除非状态码已经事先被设置了

header('Refresh: 10; url=http://www.abc.com');

等价于HTML标签中的<meta http-equiv="refresh" content="10;http://www.abc.com" />

三、用于指定文件的信息

header('Content-type:MIME类型'); //发送指定的文件MIME类型的头信息

header('Content-Type: text/html; charset=utf-8'); //指定文件的MIME类型并指定该文件的编码

header('Content-Disposition:attachement;filename=文件名称'); //指定文件的描述

header('Last-Modified: '.date('D, d M Y H:i:s', filemtime($fn)).' GMT'); //指定资源的最后修改时间

header('Content-Length:文件大小'); //指定文件的大小

四、设置响应文件的语言

header('Content-language: en'); //en为英文english,zh-cn为中文。

五、指定该文件使用的编程语言的名称和版本号

header('X-Powered-By: PHP/4.4.0');

六、指定数据传输方式

header('Transfer-Encoding:chunked');

表示网络传输中,用怎样的方式传输数据
可以是分段传输(chunked),也可以不分段直接使用原数据一次性进行传输(trunked)

如果存在transfer-encodig时,就不能再使用content-length了
因为transfer-encoding会通过额外的处理方式来改变数据的组织方式,会改变实际的数据长度,如果客户端仍按照原content-length来处理的话,则不会接收到完整的数据。

七、BASIC认证,简单的验证

header('WWW-Authenticate: Basic realm="提醒语句"');
header('HTTP/1.1 401 Unauthorized');

用于简单的有限的用户名密码组合的验证,多用于路由器和网页的简单验证

弹出提示框中的用户名密码会以BASE64加密方式加密,并把用户名和密码的原字符串保存到$_SERVER['PHP_AUTH_USER']和$_SERVER['PHP_AUTH_PW']两个变量中

if(@$_SERVER['PHP_AUTH_USER'] != 'user' || @$_SERVER['PHP_AUTH_PW'] != 'pass'){
    header('WWW-Authenticate: Basic realm="会员列表页面"');
    header('HTTP/1.0 401 Unauthorized');
    exit();
}

八、禁止本地缓存

客户端从服务器请求数据经历如下基本步骤:

1、如果请求命中本地缓存则从本地缓存中获取一个对应资源的"copy"
2、服务器转发请求,检查这个"copy"是否fresh(最新的),是则直接返回,否则继续向服务器转发请求
3、服务器接收到请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更
4、客户端更新本地缓存

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

指定缓存过期日期
但是客户端和服务器时间不同步会导致Expires的配置出现问题

header('Cache-Control: max-age=0');

指定缓存文档被访问后的保留时间,时间为秒

header('Cache-Control: no-cache');

强制客户端跳过步骤2,每次请求都必须向服务器发送

header('Cache-Control: no-store');

缓存将不存储response,包括header和body
每次请求都必发送到服务器,响应代码均是200
request并没有发送"If-Modified-Since"和"If-None-Match"头,这意味着缓存的确没有存储response

If-Modified-Since是标准的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。如果时间一致,那么返回HTTP状态码304(不返回文件内容),客户端接到之后,就直接把本地缓存文件显示到浏览器中。如果时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中
If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。当用户再次请求该资源时,将在HTTP Request中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag

header('Cache-Control: must-revalidate');

作用与no-cache相同,但更严格,强制意味更明显

header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); 整合到一起写

九、指定传输内容过程中使用的压缩方式

header('Content-Encoding: gzip');

整个数据信息是在服务器端经过怎样的压缩处理,然后客户端会以怎么的压缩编码来反向处理,以得到原始的内容。即服务器端压缩、客户端解压缩所使用的压缩方式。
常见的可用值为:gzip,compress,deflate和identity


网址导航