设为首页 收藏本站
查看: 859|回复: 0

[经验分享] Php header()函数及其常见使用

[复制链接]

尚未签到

发表于 2015-8-24 07:33:43 | 显示全部楼层 |阅读模式
语法:
Void header(string $string[,bool $replace=true [, int $http_response_code)
向客户端发送原始的HTTP报头
需注意:
Header函数必须在任何实际的输出前调用,无论是一般的html标签、文件中空行,或者来自php。就是在这个函数之前不能有任何形式的输出。

参数说明:


参数


描述


string


必需。规定要发送的报头字符串。


replace


可选。指示该报头是否替换之前的报头,或添加第二个报头。
默认是 true(替换)。false(允许相同类型的多个报头)。


http_response_code


可选。把 HTTP 响应代码强制为指定的值。(PHP 4 以及更高版本可用)



常见用法实例:
1.发送服务器状态码
header("HTTP/1.0 404 Not Found");
常用状态码


状态码


说明


100-199


表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程


200-299


成功接收请求,并已完成整个处理过程,常用200


300-399


未完成请求,客户端需要进一步细化请求,比如,请求的资源已经移动到一个新的地址,常用302,304


400-499


客户端请求有误 常用404


500-599


服务器端出现错误,常用500

  
  
  
  
  
  
  
  
  
  
  
2.页面跳转
header("Location: http://www.baidu.com/");
header("refresh:3;url=http://www.baidu.com");
3s后跳转




3.设置浏览器缓存
强制浏览器不进行缓存!



//header("Expires:-1");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control:no-cache,must-revalidate");
header("pragma:no-cache");
header("Last-Modified: ". date("D, j M Y H:i:s T") );
  

说明:
Expires后的时间必须是GMT格式的 如gmdate("M d Y H:i:s");
Cache-control常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况。


Cache-directive


说明


public


所有内容都将被缓存


private


内容只缓存到私有缓存中


no-cache


所有内容都不会被缓存


no-store


所有内容都不会被缓存到缓存或 Internet 临时文件中


must-revalidation/proxy-revalidation


如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证


max-age=xxx (xxx is numeric)


缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高



1.打开新窗口
如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间就不会重新访问服务器,如:
Header(“cache-control:max-age=5”);
表示当访问此网页后的5秒内不会再次访问服务器
2.在地址栏回车
如果值为private或Must-revalidate,则只有第一次访问时会访问服务器,以后就不在访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
3.按后退按钮
如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问
4.按刷新按钮
无论何值,都会重复访问
当指定Cache-control值为“no-cache”时,访问此页面不会在Internet临时文章夹留下页面备份。
  另外,通过指定“Expires”值也会影响到缓存。例如,指定Expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问:
Expires: Fri, 31 Dec 1999 16:00:00 GMT
5.关于"Last-Modified
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:
 Last-Modified: Fri, 12 May 2006 18:53:33 GMT
 客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
  If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
 如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
Last-Modified提高性能
聪明的开发者会把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存。因为服务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。
  过程如下:
1 客户端请求一个页面(A)。
2 服务器返回页面A,并在给A加上一个Last-Modified。
3 客户端展现该页面,并将页面连同Last-Modified一起缓存。
4 客户再次请求页面A,并将上次请求时服务器返回的Last-Modified一起传递给服务器。
5 服务器检查该Last-Modified,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。



3.文件下载
比如下载一个pdf文件



// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
//表明他是附件,进行命名并下载
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in 1.pdf
readfile('1.pdf');
  
一般



header(“content-type:application/octet-sream”);
Header(“Accept-Ranges:bytes”);//依字节返回
Header(“content-disposition:attachement;filename=’ 文件名’”);
Header(“Accept-length:”.$filesize);
  
其实要更好的了解这些,还是得去好好学习http协议啊!
参考资料:互联网....

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103197-1-1.html 上篇帖子: 微信/易信公共平台开发(二):自定义菜单的PHP实现(提供源码) 下篇帖子: [PHP]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表