• Php header()函数及其常见使用


    语法:

    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常见的取值有privateno-cachemax-agemust-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的值为privateno-cachemust-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间就不会重新访问服务器,如:

    Header(“cache-control:max-age=5”);

    表示当访问此网页后的5秒内不会再次访问服务器

    2.在地址栏回车

    如果值为privateMust-revalidate,则只有第一次访问时会访问服务器,以后就不在访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。

    3.按后退按钮

    如果值为privatemust-revalidatemax-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协议啊!

    参考资料:互联网....

     

  • 相关阅读:
    Inno Setup入门(六)——在程序目录下创建文件
    Inno Setup入门(五)——添加readme文件
    Inno Setup入门(四)——为程序创建桌面快捷方式
    Inno Setup入门(三)——指定压缩方式
    Inno Setup入门(二)——修改安装过程中的图片
    61 origin授控于MATLAB
    origin里用c语言编程
    flac3d自定义变量输出云图
    C语言学生管理系统源码分享
    c语言学生信息管理系统-学习结构体
  • 原文地址:https://www.cnblogs.com/HKUI/p/3270795.html
Copyright © 2020-2023  润新知